Pagi semuanya, lama sudah ga posting di blog ini lagi :), harap maklum karena masih banyak kesibukan yang harus diselesaikan. Yap, kali ini aku mau coba berbagi mengenai bagaimana membuat sebuah program Android sederhana untuk menampilkan data yang diambil dari database MySQL. Dalam proses pengambilan data, akan melalui beberapa proses diantaranya Android melakukan request kepada server melalui script PHP dimana koneksi terjadi di script PHP tersebut.
Kemudian PHP akan membaca request dari Android dan memprosesnya untuk melakukan pengambilan data dari database, setelah itu jika data ditemukan akan dikirimkan kembali ke Android berupa data JSON. Di Activity Android-nya akan melakukan parsing data berupa JSON tersebut setelah itu tinggal proses terakhir, yaitu mengolah data yang sudah didapatkan. Entah itu ditampilkan pada layar atau sejenisnya. Yang pasti, disini saya akan memberikan contoh untuk menampilkan data mahasiswa yang datanya diambil dari database MySQL.
Pertama coba buat sebuah database dengan nama “test“, setelah itu buatlah sebuah tabel “mahasiswa” dengan struktur tabel sebagai berikut ini :
Kemudian, jika database dan tabel sudah siap langkah selanjutnya kita buat sebuah file PHP dengan nama “profil.php” yang berisi script seperti berikut ini :
// profil.php mysql_connect("localhost", "root", ""); mysql_select_db("test"); // menerima request dari Android $n = $_REQUEST['npm']; $q = mysql_query("SELECT * FROM mahasiswa WHERE npm = '{$n}'"); $r = array(); $c = mysql_num_rows($q); if($c>0){ $r["account"] = array(); while($e = mysql_fetch_array($q)){ $a = array(); $a["npm"] = $e["npm"]; $a["nama_lengkap"] = $e["nama_lengkap"]; $a["jurusan"] = $e["jurusan"]; array_push($r["account"], $a); } $r["success"] = 1; // mengirimkan data JSON ke Android echo json_encode($r); }else{ $r["success"] = 0; echo json_encode($r); } mysql_close();
Setelah itu, buatlah sebuah Project Android yang berisikan 1 layout XML dan 2 class java, diantaranya adalah activity_main.xml, MainActivity.java dan JSONParser.java. Source code masing-masing file tersebut adalah sebagai berikut :
// activity_main.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity" > <TextView android:id="@+id/textView2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:layout_marginLeft="30dp" android:layout_marginTop="40dp" android:text="@string/tv_kode" /> <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/textView2" android:layout_below="@+id/textView2" android:layout_marginTop="20dp" android:text="@string/tv_nama" /> <TextView android:id="@+id/textView3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/textView1" android:layout_below="@+id/textView1" android:layout_marginTop="20dp" android:text="@string/tv_jurusan" /> <TextView android:id="@+id/textView4" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBaseline="@+id/textView2" android:layout_alignBottom="@+id/textView2" android:layout_toRightOf="@+id/textView2" android:text="@string/tv_fill" android:layout_marginLeft="80dp" /> <TextView android:id="@+id/textView5" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBottom="@+id/textView1" android:layout_alignLeft="@+id/textView4" android:text="@string/tv_fill" /> <TextView android:id="@+id/textView6" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBottom="@+id/textView3" android:layout_alignLeft="@+id/textView4" android:text="@string/tv_fill" /> </RelativeLayout>
// strings.xml <?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">Koneksi MySQL</string> <string name="hello_world">Hello world!</string> <string name="menu_settings">Settings</string> <string name="tv_kode">NPM</string> <string name="tv_nama">Nama Lengkap</string> <string name="tv_jurusan">Jurusan</string> <string name="tv_fill">…</string> </resources>
// MainActivity.java package kreasi.garuda.koneksimysql; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import org.apache.http.NameValuePair; import org.apache.http.message.BasicNameValuePair; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import android.os.AsyncTask; import android.os.Bundle; import android.util.Log; import android.widget.TextView; import android.app.Activity; import android.app.ProgressDialog; public class MainActivity extends Activity { private TextView fill_1, fill_2, fill_3; private String [] fill_profile = new String[10]; private String NPM = "06.2009.1.04900"; JSONParser jParser = new JSONParser(); ArrayList<HashMap<String, String>> accountsList; JSONArray accounts = null; // localhost = 10.0.2.2 (di emulator Android) private static String base_url = "http://10.0.2.2/profil.php"; private static final String TAG_SUCCESS = "success"; private static final String TAG_ACCOUNT = "account"; private ProgressDialog pDialog; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); fill_1 = (TextView) findViewById(R.id.textView4); fill_2 = (TextView) findViewById(R.id.textView5); fill_3 = (TextView) findViewById(R.id.textView6); new LoadProfile().execute(); } class LoadProfile extends AsyncTask<String, String, String> { @Override protected void onPreExecute() { super.onPreExecute(); pDialog = new ProgressDialog(MainActivity.this); pDialog.setMessage("Retrieving data. Please wait..."); pDialog.setIndeterminate(false); pDialog.setCancelable(false); pDialog.show(); } protected String doInBackground(String... args) { List params = new ArrayList(); params.add(new BasicNameValuePair("npm", NPM)); JSONObject json = jParser.makeHttpRequest(base_url, "GET", params); Log.d("All Accounts: ", json.toString()); try { int success = json.getInt(TAG_SUCCESS); if (success == 1) { accounts = json.getJSONArray(TAG_ACCOUNT); for (int i = 0; i < accounts.length(); i++) { JSONObject c = accounts.getJSONObject(i); fill_profile[0] = (c.getString("npm")); fill_profile[1] = (c.getString("nama_lengkap")); fill_profile[2] = (c.getString("jurusan")); } } } catch (JSONException e) { e.printStackTrace(); } return null; } protected void onPostExecute(String file_url) { pDialog.dismiss(); fill_1.setText(fill_profile[0]); fill_2.setText(fill_profile[1]); fill_3.setText(fill_profile[2]); } } }
// JSONParser.java package kreasi.garuda.koneksimysql; 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 JSONParser { static InputStream is = null; static JSONObject jObj = null; static String json = ""; // constructor public JSONParser() { } // function get json from url // by making HTTP POST or GET mehtod public JSONObject makeHttpRequest(String url, String method, List params) { // Making HTTP request try { // check for request method if(method == "POST"){ // request method is POST // defaultHttpClient DefaultHttpClient httpClient = new DefaultHttpClient(); HttpPost httpPost = new HttpPost(url); httpPost.setEntity(new UrlEncodedFormEntity(params)); HttpResponse httpResponse = httpClient.execute(httpPost); HttpEntity httpEntity = httpResponse.getEntity(); is = httpEntity.getContent(); }else if(method == "GET"){ // request method is GET DefaultHttpClient httpClient = new DefaultHttpClient(); String paramString = URLEncodedUtils.format(params, "utf-8"); url += "?" + paramString; HttpGet httpGet = new HttpGet(url); HttpResponse httpResponse = httpClient.execute(httpGet); 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 + "\n"); } is.close(); json = sb.toString(); } catch (Exception e) { Log.e("Buffer Error", "Error converting result " + e.toString()); } // try parse the string to a JSON object try { jObj = new JSONObject(json); } catch (JSONException e) { Log.e("JSON Parser", "Error parsing data " + e.toString()); } // return JSON String return jObj; } }
Jangan lupa di bagian Manifest Projectnya, berikan permission untuk akses INTERNET. Setelah semua source dan settingan sesuai dengan server yang ada, coba di running aplikasinya, maka akan keluar tampilan seperti gambar dibawah ini :
Semoga berhasil untuk mencoba kawan-kawan 🙂
ternyata koneksinya masih tetep pakek php ya..
aku juga baru belajar, agak rumit sedikit..tapi sedikit paham 😀
onok carane maneh nek gag pake PHP, iso gawe JDBC 🙂
selamat kalo lumayan mengerti
Mw nnya ne mas…
kan buatnya di PC, trus klo mw install ke hpny bisa jga….????
kan soalny pake file .php kan untuk koneksi databasenya….
bisa mas… dengan syarat file PHP nya diupload ke hosting, begitu juga dengan databasenya
mas maw tanya file.php nya ditaruh difolder apa ya?
maav newbi
ditaruh di hosting 🙂
koq error?
Error parsing data org.json.JSONException: Value <br of type java.lang.String cannot be converted to JSONObject
saya mau tanya kalau data yg ditampilkan berdasarkan akun user yg login bgaimana ya?
mo tanya ni itu file JSONParser.java taruh dimana y?
dalam src/com atau diluarnya?
Dalam package yg sama
gan koq pas retrieving data error muncul pesan, Unfortunately, stopped y?
coba cek logcat mu
file profil.php ditaroh dmn y?? apakah di localhost’.. mhon pencerahannya
bagusnya tolong di attach mas source programnya, jadi lebih enak belajarnya.
pusing bagi newbie kayak saya 🙁
kenapa hasilnya cuma “…”
apa karena di string.xml isinya ada:
…
mohon dibantu mas…
kemungkinan itu koneksi dengan server nya gag berhasil mas,
atau mungkin juga retrieve data nya gagal… coba dicek lebih jauh di logcat nya mas
good (y)
Gan Kalo di hubingin dengan login gimna cara ea..???
// localhost = 10.0.2.2 (di emulator Android)
private static String base_url = “http://10.0.2.2/profil.php”;
// Omm klw file profil.php nya uda di upload ke server (internet) di ganti apa 10.0.2.2
ganti sesuai nama domain server mu atau alamat IP server mu..
lek di tambahi gambar iso ra??
iso… tapi musti ngrombak / nambahi code lumayan akeh gawe nampilno gambar lan liyane sing berhubungan. sing pasti iku dasar e.