Saturday, May 11, 2013

Assalamu Alaikum Wr.Wb.,
Dalam tutorial kali ini kita akan membuat listview di Android dengan menggunakan database MySQL dan input data menggunakan PHP.


untuk menampilkan data yang diinput pada form php, maka kita menggunakan format JSON untuk mengirim data dengan menggunakan alamat http://10.0.2.2/nama_folder.



baiklah langsung saja kita mulai yaitu :
Langkah pertama :

kita buat database untuk menyimpan data dengan structure sbb :



Langkah kedua :
kita buat file koneksi.php

<?php
    //Koneksi ke database
    $conn = mysql_connect("localhost","root","");
    $db = mysql_select_db("db_wisatasulsel");
?> 
kita buat form inputdata .php

<!DOCTYPE html>
  <html>
  <head>
  <title>Input Data</title>  
  </head>
  <body>
  <form action="simpandata.php"  method="post" enctype="multipart/form-data"  name="FMHS">
  <table  width="452" border="0" align="center"  cellpadding="0" cellspacing="1"  bgcolor="#669900">
  <tr>
  <td  height="40" align="center"  bgcolor="#669900"><strong>ENTRY DATA</strong></td>
  </tr>
  <tr>
  <td  bgcolor="#FFFFFF"><table width="452"  border="0" align="center" cellpadding="5"  cellspacing="0">
  <tr><td  width="113">Nama</td><td width="11">:</td>
  <td  width="237"><input name="nama_wisata" type="text"  id="nama_wisata" size="40" ></td>
  </tr>
  <tr><td  width="113">Deskripsi</td><td width="11">:</td>
  <td><textarea rows="5" cols="30" name="deskripsi" id="deskripsi"></textarea></td>
  </tr>
  <tr><td  width="113">Latitude</td><td width="11">:</td>
  <td  width="237"><input name="latitude" type="text"  id="latitude" size="40" ></td>
  </tr>
  <tr><td  width="113">Longitude</td><td width="11">:</td>
  <td  width="237"><input name="longitude" type="text"  id="longitude" size="40" ></td>
  </tr>
  <tr><td>Gambar</td><td>:</td>
  <td><input  type="file" name="gambar"  id="gambar" size="26"></td>
  </tr>
  <tr><td  colspan="3" align="center">
  <input  name="fok" type="submit" id="fok"  value="OK" class="tombol">
  <input  name="fulang" type="reset" id="fulang"  value="Ulangi" class="tombol"></td>
  </tr>
  <tr>
  <td><a href="daftar_wisata.php">Daftar Data</a></td></tr>
  </table></td>
  </tr>
  
  </table>
  </form>  
  </body>
</html>


form simpandata.php

<?php
  include "koneksi.php";
  $nama_wisata = $_POST['nama_wisata'];
  $deskripsi = $_POST['deskripsi'];
  $latitude = $_POST['latitude'];
  $longitude = $_POST['longitude'];
  $gambar=$_FILES["gambar"]["tmp_name"];
  if (empty($nama_wisata)){              
     die ('Nama tidak boleh kosong');     
  }else if (empty ($deskripsi)){
     die ('Deskripsi tidak boleh kosong');
  }else if (empty ($latitude)){
     die ('Latitude tidak boleh kosong');
  }else if (empty ($longitude)){
     die ('Longitude tidak boleh kosong');     
  }else if (empty ($gambar)){
    die ('Gambar tidak boleh kosong');
  }else {
     $cekdata="SELECT nama_wisata FROM daftar WHERE nama_wisata='$nama_wisata'";
     $ada=mysql_query($cekdata) or die(mysql_error());  
  if(mysql_num_rows($ada)>0){ 
     die ('Nama wisata telah terdaftar');
     } else  {
        if (!empty($_FILES["gambar"]["tmp_name"]))
        {
          $namafolder="gambar/";  //tempat menyimpan file
          $jenis_gambar=$_FILES['gambar']['type'];
          if($jenis_gambar=="image/jpeg"  || $jenis_gambar=="image/jpg" || $jenis_gambar=="image/gif"  || $jenis_gambar=="image/png")
          {           
            $gambar  = $namafolder.basename($_FILES['gambar']['name']);       
            if  (!move_uploaded_file($_FILES['gambar']['tmp_name'], $gambar))
            { die("Gambar gagal dikirim"); }
          } else  { die ('Jenis file tidak sesuai');  }
        }  //end if cek file upload
        mysql_query("insert into daftar (id_wisata,nama_wisata,deskripsi,gambar,latitude,longitude)  " . 
        "values('','$nama_wisata','$deskripsi','$gambar','$latitude','$longitude')")  or die (mysql_error());
        print"<script>alert('Berhasil disimpan');location = 'daftar.php';</script>";         
     } //end if  terdaftar
}     
?> 

kemudian kita buat daftar_wisata.php

<?php
$link = mysql_connect('localhost', 'root', '') or die('Cannot connect to the DB');
mysql_select_db('db_wisatasulsel', $link) or die('Cannot select the DB');

/* grab the posts from the db */
$query = "SELECT nama_wisata, latitude, longitude FROM daftar";
$result = mysql_query($query, $link) or die('Errorquery:  '.$query);

$rows = array();
while ($r = mysql_fetch_assoc($result)) {
    $rows[] = $r;
}
$data = "{wisata:".json_encode($rows)."}";
echo $data;
?>

Langkah ketiga :
kita buat project androidnya yaitu untuk bagian layout
list_wisata.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <ListView
        android:id="@id/android:list"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:drawSelectorOnTop="false"/>

    <TextView
        android:id="@id/android:empty"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="No data" />

</LinearLayout>

list_item.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_gravity="right"
    android:orientation="vertical"
    android:padding="7dp" >

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >

        <TextView
            android:id="@+id/nama_wisata"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="nama_wisata"
            android:textAppearance="?android:attr/textAppearanceMedium" />

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_centerVertical="true"
            android:src="@drawable/arrow" />
    </RelativeLayout>

</LinearLayout>

kemudian kita buat class dengan format java
JSONfunctions.java

public class JSONfunctions {
    public static JSONObject getJSONfromURL(String url) {
        InputStream is = null;
        String result = "";
        JSONObject jArray = null;

        // http post
        try {
            HttpClient httpclient = new DefaultHttpClient();
            HttpPost httppost = new HttpPost(url);
            HttpResponse response = httpclient.execute(httppost);
            HttpEntity entity = response.getEntity();
            is = entity.getContent();

        } catch (Exception e) {
            Log.e("log_tag", "Error in http connection " + e.toString());
        }

        // convert response to string
        try {
            BufferedReader reader = new BufferedReader(new InputStreamReader(
                    is, "iso-8859-1"), 8);
            StringBuilder sb = new StringBuilder();
            String line = null;
            while ((line = reader.readLine()) != null) {
                sb.append(line + "\n");
            }
            is.close();
            result = sb.toString();
        } catch (Exception e) {
            Log.e("log_tag", "Error converting result " + e.toString());
        }

        try {

            jArray = new JSONObject(result);
        } catch (JSONException e) {
            Log.e("log_tag", "Error parsing data " + e.toString());
        }

        return jArray;
    }
}


Wisata_List.java

public class Wisata_List extends ListActivity {
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.list_wisata);
        
        ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>();

        JSONObject json = JSONfunctions
                .getJSONfromURL("http://10.0.2.2/wisata/daftar_wisata.php");

        try {

            JSONArray wisata = json.getJSONArray("wisata");

            for (int i = 0; i < wisata.length(); i++) {
                HashMap<String, String> map = new HashMap<String, String>();
                JSONObject jsonobj = wisata.getJSONObject(i);

                // map.put("id_wisata", jsonobj.getString("id_wisata"));
                map.put("nama_wisata", jsonobj.getString("nama_wisata"));

                mylist.add(map);
            }
        } catch (JSONException e) {
            Log.e("log_tag", "Error parsing data " + e.toString());
        }

        ListAdapter adapter = new SimpleAdapter(this, mylist,
                R.layout.list_item, new String[] { "nama_wisata" },
                new int[] { R.id.nama_wisata });

        setListAdapter(adapter);

        final ListView lv = getListView();
        lv.setTextFilterEnabled(true);
        lv.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
                @SuppressWarnings("unchecked")
                HashMap<String, String> o = (HashMap<String, String>) lv
                        .getItemAtPosition(position);
                Toast.makeText(Wisata_List.this, o.get("nama_wisata"), Toast.LENGTH_SHORT).show();
            }
            });
    }

}


pada bagian AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.bas.belajarlistdatabase"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="16" />
    <uses-permission android:name="android.permission.INTERNET"/>

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.bas.belajarlistdatabase.Wisata_List"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        
    </application>

</manifest>

Langkah keempat : Jalankan aplikasinya






6 comments:

  1. ga lengkap nih tutorial yg ini sama yg buat listview dari database. padahal mau belajar, jadi ga bisa deh :(

    ReplyDelete
    Replies
    1. (c) (c) (c)
      banyak tutorial lain mbak silahkan banyak referensi dari om GOOGLE......

      Delete
  2. gan punya saya kok gambarnya tidak bisa diupload ya

    ReplyDelete
  3. location = 'daftar.php';
    daftar.php ini yg mana ya codingnya gan?

    ReplyDelete
  4. gan mau nanya, ngakses datanya apa harus terhubung internet misal aplikasi tidak bisa berjalan di emulator?

    ReplyDelete
    Replies
    1. iya untuk menampilkan data pada android harus konek internet

      Delete