Tak terasa yah, sekarang kita sudah memasuki tahun 1434 Hijriyah. Bagaimana sudah punya target-target yang akan kita capai. Kalau belum coba luangkan waktu sejenak lalu tuliskan target yang harus kita capai.
Seri Belajar Android kali ini akan membahas tentang bagaimana menampilkan data dalam yang ada di database MySql ke ListView Android.
Masih Ingatkan tutorial kita terdahulu tentang Android PHP dan MySQL. Disitu kita membuat file dengan nama daftar_makanan.php
<?php $link = mysql_connect('localhost', 'user', 'password') or die('Cannot connect to the DB'); mysql_select_db('db_makanan', $link) or die('Cannot select the DB'); /* grab the posts from the db */ $query = "SELECT nama_makanan, harga FROM tbl_makanan"; $result = mysql_query($query, $link) or die('Errorquery: '.$query); $rows = array(); while ($r = mysql_fetch_assoc($result)) { $rows[] = $r; } $data = "{makanan:".json_encode($rows)."}"; echo $data; ?>
Rubah
$query = “SELECT nama_makanan, harga FROM tbl_makanan”;
Menjadi
$query = “SELECT id, nama_makanan, harga FROM tbl_makanan”;
Lalu simpan file tersebut.
Selanjutnya Mari Kita Mulai Koding Androidnya.
1. Buka Eclipse lalu buat New Android Project
Klik Next
Centang Salah satu Target Name, kemudian klik Next
Klik Finish
2. Edit File main.xml, ketikkan kode berikut
<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>
3. Buat Layout baru untuk tampilan data dalam List View, beri nama row.xml lalu ketikan kode berikut
<?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:orientation="vertical" android:padding="7dp" > <TextView android:id="@+id/nama" android:layout_width="fill_parent" android:layout_height="wrap_content" android:padding="2dp" android:textAppearance="?android:attr/textAppearanceMedium" android:textSize="20dp" /> <TextView android:id="@+id/harga" android:layout_width="fill_parent" android:layout_height="wrap_content" android:padding="2dp" android:textSize="13dp" /> </LinearLayout>
4. Buat Class yang berfungsi untuk merequest data keserver dan membaca response JSON dari Server.
package com.agus.haryanto.net.listview.mysql; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpPost; import org.apache.http.impl.client.DefaultHttpClient; import org.json.JSONException; import org.json.JSONObject; import android.util.Log; 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; } }
5. Sekarang mari kita edit file ListViewMySqlActivity.java lalu ketikkan kode berikut
package com.agus.haryanto.net.listview.mysql; import java.util.ArrayList; import java.util.HashMap; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import android.app.ListActivity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ListAdapter; import android.widget.ListView; import android.widget.SimpleAdapter; import android.widget.Toast; public class ListViewMySQLActivity extends ListActivity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>(); JSONObject json = JSONfunctions.getJSONfromURL("http://10.0.2.2/android/daftarmakanan.php"); try{ JSONArray makanan = json.getJSONArray("makanan"); for(int i=0;i<makanan.length();i++){ HashMap<String, String> map = new HashMap<String, String>(); JSONObject jsonobj = makanan.getJSONObject(i); map.put("id", jsonobj.getString("id"));; map.put("nama", jsonobj.getString("nama_makanan")); map.put("harga", "Rp. " + jsonobj.getString("harga")); mylist.add(map); } }catch(JSONException e) { Log.e("log_tag", "Error parsing data "+e.toString()); } ListAdapter adapter = new SimpleAdapter(this, mylist , R.layout.row, new String[] { "nama", "harga" }, new int[] { R.id.nama, R.id.harga }); 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(ListViewMySQLActivity.this, "ID '" + o.get("id") + "' was clicked.", Toast.LENGTH_SHORT).show(); } }); } }
6. Jangan lupa tambahkan permission untuk koneksi internet pada AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.agus.haryanto.net.listview.mysql" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="7" /> <uses-permission android:name="android.permission.INTERNET" /> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <activity android:name=".ListViewMySQLActivity" 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>
7. Sekarang Mari Kita Run Projectnya, Jika tidak ada kesalahan maka akan mucul tampilan seperti ini.
Wah, gampang yah. Jangan senang dulu, yang punya restoran bilang, bisa nggak yah kalau harganya itu disamping nama makanannya.
Untuk yang baru belajar Android bisa mengawali dengan mabaca Tutorial
Persiapan Untuk Membuat Aplikasi Android
Aplikasi Android Sederhana – Menghitung Luas Persegi Panjang
Semoga Bermanfaat
Salam Hangat
Agus Haryanto
kalo ditambahin fitur Asynctask gimana ya??saya gagal mulu…Loading tanpa henti jadinya
sy mw tny pk.. untuk file phpx diletakkan dimn yea pk??
trimakasih
@Febriyan :
http://nanang18nurhidayat.wordpress.com/2012/11/27/buku-tamu-dengan-php-dan-mysql/
mas kalo di list view dikasih search gimana?
jd misal klo kita tekan P cuma keluar Persegi Panjang dimana listactivitynya ada seratus list
pak agus ini gimana aplikasi nya engga mau di run di emulator “THE APLICATION HAS STOP UNEXPECTEDLY ”
solusinya gimana pak…?
saya udah ikutin prosedurnya….
mohon pencerahannya
terimaksasih
Halo mas agus, saya dah baca and coba tutorialnya. awalnya ketika saya running terjadi beberapa error and bisa saya atasi.. tapi ada error terakhir yang pesan lognya sbb :
Error parsing dataorg.json.JSONException: Value [{“ROOM”:”315 “,”NORES”:39,”NAME”:”Ambon (Bang Toyib)”}] of type org.json.JSONArray cannot be converted to JSONObject
saya udah coba and cari, tapi tetap gak nemu mas..
mohon pencerahannya ya mas..
maklum masih newbie..
THks putu
Assalamu’alaikum Wr.Wb…
Bang agus mau tanya…
Gimana cara mensinkronisasikan database sqlite (client android) dengan database mysql (server), dimana data yang diinputkan di server akan tersimpan di database sqlite (client android) begitu juga sebaliknya? Soalnya saya pengen buat kamus android client server. Servernya rencananya akan saya publish di internet.
Kan gak mungkin pengguna pada saat menggunakan kamus harus konek internet dulu.
Terima Kasih
Bang agus kalo punya tutorialnya, tolong dibagi yaa…!!!
dear mas agus,
terimakasih tutorial nya ya.. sangat membantu sekali.
oh iya mas, kalau boleh ditambahin dong tutorial cara generate Google map API versi 2 dan 3 nya. Mengingat API Map yang versi 1 akan berakhir di tanggal 3 maret 2013.
permisi bang agus…
mau tanya sedikit..
misal tabel makanan di ubah sedikit ditambah rows jenis makanan..nah kalo misal di file php nya diubah ditambahi kondisi “where” misal
“SELECT nama_makanan, harga FROM tbl_makanan WHERE nama_makanan = $jenis_makanan”
itu nampilinnya di android nya gimana bang.
mohon bimbingannnya…
terimakasih sebelumnya 🙂
Write in English………
@Zlatan Oke, Next I will write in English. But for now you can use translator tools (at the toop left)
bang punya ku kok eroor ada gagal tambah:127.0.0.1 ………
mas, ada source yang sudah jadinya ??? punya saya force close mulu
Assalam . . .
Mas itu kn data servicenya pake JSON, nah trus gmana klo misalnya pake XML parser???
bisa tlong dipoistkan g tutorialnya??
terima kasih mas atas informasinya
terima kasih mas atas tutorialnya
Terima kasih mas untuk tutorialnya, saya ingin menanyakan apakah ada tutorial untuk login menggunakan SharedPreference? Misalnya databasenya disimpan di MySQL kemudian setelah login kita ingin menyimpan database dari mysql ke SharedPreference. Terima kasih sebelumnya mas.
oh iya mas waktu saya run ini ngeluarin No Data kira2 kenapa ya mas?
pak……kalo pake sqlite gimana pak ??? mohon di buatkan tutorialnya dong pak 😀
pak saya mau tanya dong, saya udah coba kodingan di atas, saya ganti minimum sdk versionnya jadi 14 atau di atas 14 malah error, kalau saya pakai versi 8 mau muncul, apakah source code json nya untuk api 14 berbeda pak ? ditunggu balesannya pak 🙂
mas knapa aplikasinya tdk mau di run? malah berhenti dan keluar otomatis?