Belajar Android ListView PHP MySQL

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

22 comments to Belajar Android ListView PHP MySQL

  • Febriyan

    kalo ditambahin fitur Asynctask gimana ya??saya gagal mulu…Loading tanpa henti jadinya

  • blank rendra

    sy mw tny pk.. untuk file phpx diletakkan dimn yea pk??

    trimakasih

  • ricky

    mas kalo di list view dikasih search gimana?
    jd misal klo kita tekan P cuma keluar Persegi Panjang dimana listactivitynya ada seratus list

  • denny

    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…!!!

  • itakzui

    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………

  • Agus Haryanto

    @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 ………

  • Rahman

    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

  • ririn

    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.

  • ririn

    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 😀

  • imam

    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 🙂

  • husnandarhusain

    mas knapa aplikasinya tdk mau di run? malah berhenti dan keluar otomatis?

Leave a Reply

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>