Tuesday, September 16, 2014

Membuat ListView di Android Dari Database MySql

Kali ini saya ingin share sedikit mengenai cara membuat ListView dari database phpMyAdmin. Kebetulan kemaren-kemaren salah satu rekan dari diskusi android email saya dan bertanya gimana caranya membuat ListView yang datanya dari database phpMyAdmin. Trus jika list tersebut di klik maka akan pindah ke activity lain yang yang menampilkan detail dari list yang di klik tadi...

Kira-kira screenshotnya seperti ini : 

Gambar 1. Tampilan List nya
Gambar 2. Tampilan Detail List nya
Disini saya buat contoh list region. Kebetulan saya ada kerjaan mengenai region ini jadi sekalian lah saya caplok daripada buat yang baru lagi, capek. Hehhee..
Dan untuk project ini kita hanya membutuhkan 3 class, yaitu: listExample.javaDetailKhsActivity.java & JSONParser.java.
1. listExample.java => Class ini merupakan main dari project ini dan class ini juga yang menampilkan list dari database yang yang ingin ditampilkan.

package nielpoenya.blogspot.com;

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.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.AdapterView;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import android.widget.AdapterView.OnItemClickListener;

public class listExample extends ListActivity {
JSONArray str_login = null;
ArrayList> angkatan = new ArrayList>();

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.panel_khs);

JSONParser jParser = new JSONParser();
String link_url = "http://10.0.2.2:81/siakad-andro/khs.php";
JSONObject json = jParser.AmbilJson(link_url);

try {
str_login = json.getJSONArray("info");

for (int i = 0; i < str_login.length(); i++) {
JSONObject ar = str_login.getJSONObject(i);

String jdl = ar.getString("RegionName");
String id = ar.getString("RegionID");

HashMap map = new HashMap();

map.put("jdl", jdl);
map.put("id", id);

angkatan.add(map);
}
} catch (JSONException e) {
e.printStackTrace();
}

// Memanggil method adapter_listview()
// Array JSON tadi di tampilkan dalam bentuk list
this.adapter_listview();
}

public void adapter_listview() {
ListAdapter adapter = new SimpleAdapter(this, angkatan,R.layout.list_item,new String[] { "jdl", "id"}, new int[] {R.id.tangk, R.id.kodeangk});

setListAdapter(adapter);
ListView lv = getListView();

// Menangani jika salah satu list di klik
// Menampilkan detail dari list yang dipilih
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView parent, View view,int position, long id) {
String kode_ang = ((TextView) view.findViewById(R.id.kodeangk)).getText().toString();
Intent in = new Intent(getApplicationContext(), DetailKhsActivity.class);
in.putExtra("kd_smt", kode_ang);

startActivity(in);
}
});
}
}

2. DetailKhsActivity => Class ini berfungsi untuk menampilkan atau menangani detail dari list tadi. Jadi misalnya kita memilih/klik salah satu list maka akan ditampilkan detailnya. 

package nielpoenya.blogspot.com;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.app.Activity;
import android.os.Bundle;
import android.view.Window;
import android.view.WindowManager;
import android.widget.TextView;

public class DetailKhsActivity extends Activity {
public String kode;
JSONArray str_login = null;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.panel_detail_khs);

Bundle b = getIntent().getExtras();
kode = b.getString("kd_smt");

String link_url = "http://10.0.2.2:81/siakad-andro/detail-info.php?RegionID="+kode;
JSONParser jParser = new JSONParser();
JSONObject json = jParser.AmbilJson(link_url);

try {
str_login = json.getJSONArray("info");
String jdwl = "";
TextView isi = (TextView) findViewById(R.id.dkhs);
for(int i = 0; i < str_login.length(); i++){
JSONObject ar = str_login.getJSONObject(i);
jdwl += "RegionID : " + ar.getString("RegionID")+"\n"+
"CustomerID : " + ar.getString("CustomerID")+"\n"+
"RegionName : " + ar.getString("RegionName")+"\n"+
"TrapReceiverID : " + ar.getString("TrapReceiverID")+"\n"+
"Status : " + ar.getString("Status")+"\n"+
"Note : " + ar.getString("Note")+"\n";
}
isi.setText(jdwl);

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

}
}
3. JSONParser => Kalau class ini sebenarnya class pembantu untuk parse data dari database ke mobile dengan JSON. 
package nielpoenya.blogspot.com;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
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 JSONParser {

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

// constructor
public JSONParser() {

}

public JSONObject AmbilJson(String url) {

// Making HTTP request
try {
// defaultHttpClient
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 + "\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;

}
}

Gimana codingnya?
Ribet, biasa atau gimana? :D
Kalau nggak mau ribet source projectnya dapat di unduh disini : Membuat ListView dari Database phpMyAdmin di Android


Sumber : http://www.booting09.com
Disqus Comments