Di halaman ini kita akan membuat sebuah class JSON yang akan di pakai oleh class-class lain-nya agar sebuah aplikasi bisa dinamik dan responsive. Kalau perhatikan isi dari class-class di tutorial bagian1, 2 dan 3 ...disana JSON_nya telah di deklarasi dan telah terpakai dengan nama ClassJSONParser.java. Saya sengaja menamakan-nya demikian karena ia memang bekerja untuk 'parsing' data antar klien dan server.
Berikut adalah isi dari ClassJSONParser.java
package com.vik_sintus.projects.koneksiandroidmysql; /** ©Vik Sintus Projects */ import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import java.util.List; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.NameValuePair; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.client.utils.URLEncodedUtils; import org.apache.http.impl.client.DefaultHttpClient; import org.json.JSONException; import org.json.JSONObject; import android.util.Log; public class ClassJSONParser { static InputStream inputStreamNya = null; static JSONObject JSONObjectNya = null; static String jsonStringNya = ""; // berikut adalah constructor-nya public ClassJSONParser() { } //ambil json object melalui url script_nya maksudnya //object yang dari php yang ada di server public JSONObject ambilJsonDariUrl(final String urlNya) { // object dari Json di ambil melalui http request try { // kirim data bolak-balik pakai 'post' yah biar agak aman. DefaultHttpClient httpClientNya = new DefaultHttpClient(); HttpPost httpPostNya = new HttpPost(urlNya); // begitu juga dengan jawaban dari server pakai metode POST HttpResponse httpResponseNya = httpClientNya.execute(httpPostNya); // mengambil data yang dapat di response oleh server. HttpEntity httpEntityNya = httpResponseNya.getEntity(); // buka sebuah inputStream ke data yang ada. inputStreamNya = httpEntityNya.getContent(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } try { // buat sebuah BufferedReader untuk di parse melalui inputStream. BufferedReader bufferedReaderNya = new BufferedReader(new InputStreamReader( inputStreamNya, "iso-8859-1"), 8); // deklarasikan sebuah string utk membantu proses parsing-nya. StringBuilder stringBuilderNya = new StringBuilder(); // deklarasi sebuah string utk menyimpan // data JSON object dalam bentuk string. String barisanStringNya = null; // susun string-nya sampai null(habis). baris demi baris while ((barisanStringNya = bufferedReaderNya.readLine()) != null) { stringBuilderNya.append(barisanStringNya + "\n"); } // tutup input stream-nya. inputStreamNya.close(); // ubalah 'string builder data' menjadi string aslinya. jsonStringNya = stringBuilderNya.toString(); } catch (Exception e) { Log.e("BufferNya Salah", "Salah mengolah menjadi string aslinya " + e.toString()); } // coba mengolah stringNya menjadi sebuah JSON object try { JSONObjectNya = new JSONObject(jsonStringNya); } catch (JSONException e) { Log.e("JSON ParserNya", "Salah Mengolah data " + e.toString()); } return JSONObjectNya; } // fungsi ambilJsonDariUrl dengan // cara HTTP POST atau GET public JSONObject membuatHttpRequest(String urlNya, String caraNya, List<NameValuePair> parameterNya) { // buat jalur HTTP-nya try { // priksa metode yang di pakai POST atau GET if(caraNya == "POST"){ DefaultHttpClient httpClientNya = new DefaultHttpClient(); HttpPost httpPostNya = new HttpPost(urlNya); httpPostNya.setEntity(new UrlEncodedFormEntity(parameterNya)); HttpResponse httpResponseNya = httpClientNya.execute(httpPostNya); HttpEntity httpEntityNya = httpResponseNya.getEntity(); inputStreamNya = httpEntityNya.getContent(); //kalau pakai cara 'GET' maka search string_nya akan //tampak di URL }else if(caraNya == "GET"){ DefaultHttpClient defaultHttpClientNya = new DefaultHttpClient(); String stringYgTampakDiUrl = URLEncodedUtils.format(parameterNya, "utf-8"); urlNya += "?" + stringYgTampakDiUrl; HttpGet httpGetNya = new HttpGet(urlNya); HttpResponse httpResponseNya = defaultHttpClientNya.execute(httpGetNya); HttpEntity httpEntityNya = httpResponseNya.getEntity(); inputStreamNya = httpEntityNya.getContent(); } } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } try { BufferedReader bufferedReaderNya = new BufferedReader(new InputStreamReader( inputStreamNya, "iso-8859-1"), 8); StringBuilder stringBuilderNya = new StringBuilder(); String barisanDataNya = null; while ((barisanDataNya = bufferedReaderNya.readLine()) != null) { stringBuilderNya.append(barisanDataNya + "\n"); } inputStreamNya.close(); jsonStringNya = stringBuilderNya.toString(); } catch (Exception e) { Log.e("Buffer_nya Error", "Salah mengkonvert hasil" + e.toString()); } // coba parsing string-nya menjadi JSON object try { JSONObjectNya = new JSONObject(jsonStringNya); } catch (JSONException e) { Log.e("JSON ParserNya", "Salah proses datanya " + e.toString()); } return JSONObjectNya; } }
Saya telah menyisipkan banyak komentar di dalam kode di atas.... silahkan di coba di bangun di android dan di kembangkan menjadi aplikasi besar
Kalau ingin coba menjalankan aplikasi ini di HP atau di emulator ...Berikut adalah beberapa file pelengkap aplikasi ini. Ada satu file xml yang tidak ada class pasangan-nya seperti ClassBacaKomentar.java berpasangan dengan baca_komentar.xml.
File yang yang tak punya pasangan itu bernama komentar_tunggal.xml yang harus di tempatkan bersama file xml yang lain-nya di dalam folder 'layout' di android. Dia bekerja untuk mengatur tampilan dari setiap satu komentar. Berikut adalah isi dari file komentar_tunggal.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="#f0f0f0" android:orientation="vertical" > <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="5dp" android:background="@drawable/garis_pinggir_komentar" android:orientation="vertical" > <LinearLayout android:id="@+id/kotakKomentar" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="2dp" android:background="@drawable/latar_belakang_komentar" android:orientation="horizontal" > <ImageView android:id="@+id/imageView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/lodokn_one" /> <LinearLayout android:id="@+id/kotakKomentar" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="2dp" android:orientation="vertical" android:padding="5dp" > <TextView android:id="@+id/judul" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="bottom" android:paddingBottom="2dip" android:paddingLeft="5dp" android:paddingTop="6dip" android:textColor="#333" android:textSize="16sp" android:textStyle="bold" /> <TextView android:id="@+id/komentar" android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingBottom="2dip" android:paddingLeft="8dp" android:textColor="#888" > </TextView> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:paddingBottom="5dp" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="left" android:paddingLeft="5dp" android:text="Nama: " android:textColor="#5d5d5d" android:textStyle="bold" > </TextView> <TextView android:id="@+id/usernameNya" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="left" android:textColor="#acacac" android:textStyle="bold" > </TextView> </LinearLayout> </LinearLayout> </LinearLayout> </LinearLayout> </LinearLayout>
Perhatikan file komentar_tunggal.xml diatas ia minta dua buah file untuk di masuk-kan ke dalam folder 'drawable' . Kedua file tsb antara lain:
garis_pinggir_komentar.xml yang isinya nampak sebagai berikut:
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true"><shape> <solid android:color="#cccccc" /> </shape></item> <item><shape> <gradient android:angle="270" android:endColor="#ccc" android:startColor="#fff" /> <corners android:radius="2dp" /> </shape></item> </selector>
Dan latar_belakang_komentar.xml sebagai berikut
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true"> <shape> <solid android:color="#cccccc" /> </shape></item> <item><shape> <gradient android:angle="90" android:endColor="#f5f5f5" android:startColor="#fff" /> </shape></item> </selector>
Berikut adalah isi dari AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.vik_sintus.projects.koneksiandroidmysql" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17" /> <uses-permission android:name="android.permission.INTERNET"/> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/nama_aplikasi" android:theme="@style/AppTheme" > <activity android:name="com.vik_sintus.projects.koneksiandroidmysql.ClassUtkLogIn" android:label="@string/nama_aplikasi" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name="com.vik_sintus.projects.koneksiandroidmysql.ClassRegistrasi" android:label="@string/nama_aplikasi" > </activity> <activity android:name="com.vik_sintus.projects.koneksiandroidmysql.ClassTambahKomentar" android:label="@string/nama_aplikasi" > </activity> <activity android:name="com.vik_sintus.projects.koneksiandroidmysql.ClassBacaKomentar" android:label="@string/nama_aplikasi" > </activity> </application> </manifest>masih ada beberapa file lagi ... stay tune yah
diterusin lagi bro...bermanfaat banget..
ReplyDeletekalo bisa saya minta contoh2 lain kasus database..seperti update misalnya..hehe
setelah membuat JSON ada lanjutannya lagi gan ?
ReplyDeletegan, dilanjutin dong. Ini bagus banget buat belajar :D
ReplyDeleteOm.plis projeknya diupload ke github....gw pake hp nih codingnya ..jadi susah kalo copy paste :(
ReplyDeleteGan.. mana nih lanjutan code nya.. sayang udah sudah setengah jalan...
ReplyDeletestengah2 share tutor....
ReplyDeletesampai tahap ini aku tarik pertanyaan ku di bagian 1 dan 2 soalnya udah ngerti_
ReplyDeletebuat om semangat tuess..... yah_
karena tutorial ini sangat membantu bagi kami yg sedang belajar java_
dan aku tunggu tutor lengkapnya, katanya masih ada tuh heheheh......._
makasij omm..........
Setelah ulang mengulang tutor dari bagian 1, 2,3 sampai tahap ini (JSON)_
ReplyDeleteTernyata tutornya dah finish alias tidak ada lagi file2 pendukung yg lain_
dengan demikian sekali lagi aku tarik pernyataan diatas di bait ke 4 :D_
Salam dari aku "Aat Mendua"
//Aat Mendua itu artinya Hijra dari BlackBerry ke Android hehehe...............
//Hidup Android indonesia............
if (ternyata masih ada file pendukungnya diluar kesadaran ku mohon petunjuknya om)
{
komen ini di hapus aja om
}else{
heehehee.................................
}
boleh minta kodingannya gak min?
ReplyDelete