Wednesday, May 15, 2013

Assalamu Alaikum Wr.Wb.
Tutorial ini lanjutan dari tutorial sebelumnya yaitu Android PHP MySQL. Pada tutorial ini kita akan menampilkan listview dari database MySQL yang apabila di klik maka akan menampilkan activity detail dari data tersebut.

Langsung saja kita praktekkan :
Pertama : kita buat database dan bisa menggunakan database yang telah ada pada tutorial sebelumnya

Kedua : kita buat file daftar-wisata.php, detail-wisata.php dan koneksi.php

daftar-wisata.php
<?php
include("koneksi.php");
$q = mysql_query('SELECT * FROM daftar');
$v = '{"wisata" : [';
while($r=mysql_fetch_array($q))
{
    $ob = array('"','<br>','</br>');
    if(strlen($v)<15)
    {
        $v .= '{"id" : "'.str_replace($ob,' ',strip_tags($r["id_wisata"])).'","nama" : "'.str_replace($ob,' ',strip_tags($r["nama_wisata"])).'","deskripsi" : "'.str_replace($ob,' ',strip_tags($r["deskripsi"])).'","latitude" : "'.str_replace($ob,' ',strip_tags($r["latitude"])).'","longitude" : "'.str_replace($ob,' ',strip_tags($r["longitude"])).'","gambar" : "/'.str_replace($ob,' ',strip_tags($r["gambar"])).'"}';
    }
    else
    {
        $v .= ',{"id" : "'.str_replace($ob,' ',strip_tags($r["id_wisata"])).'","nama" : "'.str_replace($ob,' ',strip_tags($r["nama_wisata"])).'","deskripsi" : "'.str_replace($ob,' ',strip_tags($r["deskripsi"])).'","latitude" : "'.str_replace($ob,' ',strip_tags($r["latitude"])).'","longitude" : "'.str_replace($ob,' ',strip_tags($r["longitude"])).'","gambar" : "/'.str_replace($ob,' ',strip_tags($r["gambar"])).'"}';
    }
}
$v .= ']}';
echo $v;
?>

detail-wisata.php

<?php
$kd = $_GET['kode'];
include("koneksi.php");
$q = mysql_query('SELECT * FROM daftar WHERE id_wisata="'.$kd.'"');
$v = '{"wisata" : [';
while($r=mysql_fetch_array($q))
{
    $ob = array('"','<br>','</br>');
        $v .= '{"id" : "'.str_replace($ob,' ',strip_tags($r["id_wisata"])).'","nama" : "'.str_replace($ob,' ',strip_tags($r["nama_wisata"])).'", "deskripsi" : "'.str_replace($ob,' ',strip_tags($r["deskripsi"])).'", "latitude" : "'.str_replace($ob,' ',strip_tags($r["latitude"])).'", "longitude" : "'.str_replace($ob,' ',strip_tags($r["longitude"])).'", "gambar" : "'.str_replace($ob,' ',strip_tags($r["gambar"])).'"}';

}
$v .= ']}';
echo $v;
?>

koneksi.php

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

Ketiga : buat project androidnya
pada bagian layout terdapat tiga file yaitu main.xml, list_item.xml, single_list_item.xml

main.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:orientation="vertical">

    <ListView
        android:id="@android:id/list"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />

</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" >

        <!-- Name Label -->

        <TextView
            android:id="@+id/nama"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:paddingBottom="2dip"
            android:textColor="#333333"
            android:textSize="16sp"
            android:textStyle="bold" />

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

        <TextView
            android:id="@+id/kode"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:textColor="#D7DEF0"
            android:textSize="1sp" >
        </TextView>
    </RelativeLayout>

</LinearLayout>

single_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="wrap_content"
    android:background="#fff"
    android:orientation="vertical"
    android:padding="10dp" >

    <ImageView
        android:id="@+id/gambar"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:src="@drawable/no_image" />

    <TextView
        android:id="@+id/nama_wisata"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:paddingBottom="5dip"
        android:paddingTop="10dip"
        android:textColor="#333333"
        android:textSize="20dip"
        android:textStyle="bold" />

    <TextView
        android:id="@+id/latitude"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:paddingBottom="5dip"
        android:paddingTop="5dip"
        android:textColor="#999999"
        android:textSize="12dip"
        android:textStyle="bold" />

    <TextView
        android:id="@+id/longitude"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:paddingBottom="5dip"
        android:paddingTop="5dip"
        android:textColor="#999999"
        android:textSize="12dip"
        android:textStyle="bold" />

    <ScrollView
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" >

        <TextView
            android:id="@+id/deskripsi"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="#333333"            
            android:textSize="14dip" />
    </ScrollView>

</LinearLayout>
 kemudian kita buat file class java dengan file MainActivity.java, Detail.java dan JSONParser.java MainActivity.java
public class MainActivity extends ListActivity {

    private static String link_url = "http://10.0.2.2/wisata/daftar-wisata.php";
    
    private static final String AR_ID = "id";
    private static final String AR_JUDUL = "nama";
    

    JSONArray wisata = null;
    ArrayList<HashMap<String, String>> daftar_wisata = new ArrayList<HashMap<String, String>>();

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        

        JSONParser jParser = new JSONParser();

        JSONObject json = jParser.AmbilJson(link_url);

        try {
            wisata = json.getJSONArray("wisata");
            
            for(int i = 0; i < wisata.length(); i++){
                JSONObject ar = wisata.getJSONObject(i);
                
                String id = ar.getString(AR_ID);
                String nama = ar.getString(AR_JUDUL);
                                
                HashMap<String, String> map = new HashMap<String, String>();

                map.put(AR_ID, id);
                map.put(AR_JUDUL, nama);
                
                daftar_wisata.add(map);
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }
        this.adapter_listview();
    }
    
    public void adapter_listview() {

        ListAdapter adapter = new SimpleAdapter(this, daftar_wisata,
                R.layout.list_item,
                new String[] { AR_JUDUL, AR_ID}, new int[] {
                        R.id.nama, R.id.kode});

        setListAdapter(adapter);
        ListView lv = getListView();
        lv.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view,int position, long id) {
                String kode = ((TextView) view.findViewById(R.id.kode)).getText().toString();
                
                Intent in = new Intent(MainActivity.this, Detail.class);
                in.putExtra(AR_ID, kode);
                startActivity(in);

            }
        });        
    }
}
Detail.java
public class Detail extends Activity {

    private static final String AR_ID = "id";
    JSONArray wisata = null;
    String gambar;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.single_list_item);
        
        Intent in = getIntent();
        String kode = in.getStringExtra(AR_ID);
        String link_url = "http://10.0.2.2/wisata/detail-wisata.php?kode="+kode;
        
        JSONParser jParser = new JSONParser();

        JSONObject json = jParser.AmbilJson(link_url);

        try {
            wisata = json.getJSONArray("wisata");
            
            for(int i = 0; i < wisata.length(); i++){
                JSONObject ar = wisata.getJSONObject(i);
                
                TextView nama = (TextView) findViewById(R.id.nama_wisata);
                TextView lat = (TextView) findViewById(R.id.latitude);
                TextView lon = (TextView) findViewById(R.id.longitude);
                TextView desk = (TextView) findViewById(R.id.deskripsi);

                String nama_d = ar.getString("nama");
                String lat_d = ar.getString("latitude");
                String lon_d = ar.getString("longitude");
                String desk_d = ar.getString("deskripsi");

                                            
                nama.setText(nama_d);
                lat.setText("Latitude : " +lat_d);
                lon.setText("Longitude : " +lon_d);
                desk.setText("Deskripsi : " + "\n" + desk_d);

                }catch (JSONException e){ 
             e.printStackTrace();
            
        }
    }
}

  
JSONParser.java
public class JSONParser {

    static InputStream is = null;
    static JSONObject jObj = null;
    static String json = "";


    public JSONObject AmbilJson(String url) {

        try {
            DefaultHttpClient httpClient = new DefaultHttpClient();
            HttpPost httpPost = new HttpPost(url);

            HttpResponse httpResponse = httpClient.execute(httpPost);
            HttpEntity httpEntity = httpResponse.getEntity();
            is = httpEntity.getContent();            

        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        
        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);
            }
            is.close();
            json = sb.toString();
        } catch (Exception e) {
            Log.e("Buffer Error", "Error converting result " + e.toString());
        }

        try {
            jObj = new JSONObject(json);
        } catch (JSONException e) {
            Log.e("JSON Parser", "Error parsing data " + e.toString());
        }

        return jObj;

    }
}
Jangan lupa tambahkan pada bagian AndroidManifest.xml
 
Keempat : jalankan aplikasinya...

37 comments:

  1. Gan Bleh Mnta link Souerce Codenya ?

    ReplyDelete
  2. kenapa ya waktu dijalankan di emulator androidnya malah "unfoturnately, wisata stopped working" itu gara2 apa ya ? mohon infonya. terimakasih

    ReplyDelete
    Replies
    1. coba baca artikel ini mba' http://android-pemula.blogspot.com/2013/01/penyebab-force-close-pada-android.html

      Delete
  3. mas minta soucenya lengkap ke email noer.uty@gmail.com

    ReplyDelete
    Replies
    1. Semua source code sudah ada diatas tinggal di copas sj mas bro... (c)

      Delete
  4. izin sedot ilmu nya (p)
    thanks for sharing :))
    semoga berkah (c)

    ReplyDelete
  5. sedap tutorial nya...
    mangstap gan ijin sedot ya :)

    ReplyDelete
  6. kakak...ini punya saya kok data dari databasenya nggamuncul ya,,kira2 ada solusi ngga?trims..

    ReplyDelete
    Replies
    1. koneksi database belum benar coba diperiksa kembali listingx.... :-?

      Delete
  7. gan,cara dari detail ke maps gmna gan ??

    ReplyDelete
    Replies
    1. sudah ada pada source code gan silahkan di utak atik aja..... :d

      Delete
  8. This comment has been removed by the author.

    ReplyDelete
  9. mas, itu file php di folder mana nyimpennya? di htdocs xampp yah?

    ReplyDelete
  10. gan mau tanya itu bikin file yang .php itu dieclipse nya atau gimana bang? mohon pencerahannya. terima kasih

    ReplyDelete
  11. buat file php menggunakan xampp (c)

    ReplyDelete
    Replies
    1. ada caranya gak bang, masih belum paham soalnya

      Delete
  12. detail.java nya kok error ya

    }catch (JSONException e){
    e.printStackTrace();

    }

    ReplyDelete
  13. kenapa ini gak bisa gan ?

    error di

    wisata = json.getJSONArray("daftar");

    ReplyDelete
  14. Thank gan udah share banyak tutorial buat android.
    Numpang share gan. Ane buat aplikasi android buat Belajar Matematika SD (saat ini masih untuk kelas III). Soal-soal banyak dan ada kunci jawabannya. Mungkin bisa ditesting dan berguna gan. Bisa dicek di google playstore di link : https://play.google.com/store/apps/details?id=fahim_edu.matematikasd
    Terimakasih gan

    ReplyDelete
  15. gan php ane kok eror gini yaa?
    Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\Android\wisatakategori.php on line 6
    {"wisata" : []}

    detail-wisata.php ane ganti namanya jadi wisatakategori.php

    ReplyDelete
    Replies
    1. perhatijan penulisan listing di database dan koneksinya....

      Delete
  16. Min itu nyimpan foto dan text nya dimana ? Saya belum ngerti

    ReplyDelete
  17. Min itu nyimpan foto dan text nya dimana ? Saya belum ngerti

    ReplyDelete
  18. mksi infonya...
    sy boleh nanya gk min?
    menampilkan banyak data dari sql ke listview bgaimana yaa?
    misalnya seribu kosakata bgaimana yaa caranya? sharing tutorialnya donk min??

    ReplyDelete
    Replies
    1. Artikel yang menarik. Indahnya saling berbagi pengetahuan dan keilmuan. Silahkan singgah di blog perkuliahan pemrograman saya:

      http://rismonhasiholansianipar.blogspot.co.id

      http://rhsianipar.blogspot.co.id

      http://rismonhsianipar.blogspot.co.id

      Delete
  19. ketika dijalankan aplikasi keluar 'Unfortunatelt, daftarwisata has stoped', padahal sourcecode udah benar. Gimana itu gan?

    ReplyDelete
    Replies
    1. Ini keterangan error dilogcat : java.lang.RuntimeException: Unable to start activity ComponentInfo{com.riza.daftarwisata/com.riza.daftarwisata.MainActivity}: android.os.NetworkOnMainThreadException

      Delete
    2. Saya pakai android studio 3.0.1

      Delete