Ambil data dari server di android
Berhubung tugas akhir ane berhubungan dengan data dari server nah ane sedikit kasih tutorial nih mengenai cara mengambil data dari server menggunakan teknologi mobile terutama android. Hehe oke let's take a look...For the fist time the material that you have to know is about webservice. What is the webservice silahkan cari sendiri di Internet ya. Nah pada dasarnya konsep fetching data ke server melalui teknologi mobile biasanya menggunakan webservice. Nah webservice inilah yang merupakan jembatan yang menghubungkan antara data kita yang ada di server dengan data kita yang mau kita fetch. Jadi data itu tidak bisa langsung ditransfer dari mysql ke aplikasi mobile client kita. Jadi kita harus persiapkan service dulu agar kita dapat bertukar data dengan server tersebut.
Nah untuk mekanisme pertukaran datanya biasanya menggunakan file yang bertipe .xml, atau json. Untuk mobile android sendiri ane saranin pake Json coz dari berbagai referensi yang ane baca Json lebih cepat parsing dan membutuhkan size data yang lebih sedikit dibandingkan dengan xml. Tetapi gapapa kalo make XML masih oke kita pake kok.
Nah untuk yang belum ngerti apa itu json formatnya kayak gini nih
[{"year":"2006","period_id":"12","month_id":"0","reg_id":"1100","data_source_id":"12","value":"70786835.16","cat_id":"147","var_id":"77","unit_type":"Juta Rupiah","status":"1","access_count":"133"},{"year":"2006","period_id":"12","month_id":"0","reg_id":"1200","data_source_id":"12","value":"160376799.09","cat_id":"147","var_id":"77","unit_type":"Juta Rupiah","status":"1","access_count":"133"},{"year":"2006","period_id":"12","month_id":"0","reg_id":"1300","data_source_id":"12","value":"53029588.1","cat_id":"147","var_id":"77","unit_type":"Juta Rupiah","status":"1","access_count":"133"}]Sebelum konek ke internet jangan lupa permission di androidnya..
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
Nah untuk konek data ke server di android bisa memakai method sebagai berikut ..
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.SocketTimeoutException; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.conn.HttpHostConnectException; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.params.BasicHttpParams; import org.apache.http.params.HttpConnectionParams; import org.apache.http.params.HttpParams; import org.data.provider.exception.KoneksiTidakAdaException; import org.data.provider.exception.WaktuHabisException; import org.json.JSONArray; import org.json.JSONException; public class RestClient { // pesan di service jika tidak ditemukan datanya public static final String NOT_FOUND = "no query"; /** * To convert the InputStream to String we use the BufferedReader.readLine() * method. We iterate until the BufferedReader return null which means * there's no more data to read. Each line will appended to a StringBuilder * and returned as String. */ private static String convertStreamToString(InputStream is) { BufferedReader reader = new BufferedReader(new InputStreamReader(is)); StringBuilder sb = new StringBuilder(); String line = null; try { while ((line = reader.readLine()) != null) { sb.append(line + "\n"); } } catch (IOException e) { e.printStackTrace(); } finally { try { is.close(); } catch (IOException e) { e.printStackTrace(); } } return sb.toString(); } /** * Method untuk konek ke Service yang dipanggil ke service JSON * * @param url * @return JSONArray * @throws WaktuHabisException */ public static int TIME_OUT = 15000; public static JSONArray connect(String url) throws WaktuHabisException, KoneksiTidakAdaException { JSONArray hasil = null; HttpParams httpParams = new BasicHttpParams(); HttpClient httpclient = new DefaultHttpClient(httpParams); HttpGet httpget = new HttpGet(url); HttpResponse response; HttpConnectionParams.setConnectionTimeout(httpParams, TIME_OUT); HttpConnectionParams.setSoTimeout(httpParams, TIME_OUT); try { response = httpclient.execute(httpget); // Log.i("Status koneksi",response.getStatusLine().toString()); HttpEntity entity = response.getEntity(); if (entity != null) { InputStream instream = entity.getContent(); String result = convertStreamToString(instream); // Log.i("Hasil dari inputstream",result); if (result == NOT_FOUND) return null; JSONArray json = new JSONArray(result); hasil = json; instream.close(); } }catch(HttpHostConnectException ex){ throw new KoneksiTidakAdaException(); } catch (SocketTimeoutException e) { throw new WaktuHabisException(); } catch (IOException e) { e.printStackTrace(); } catch (JSONException e) { e.printStackTrace(); } return hasil; } }
Jangan usah kuatir karena default java sudah dikasih banyak parser yang tersedia dari JSON ataupun XML tinggal gunain aja...
Nah dengan mekanisme tersebut kita dapat berinteraksi dengan client android kita. Nah disini saya coba kasih sedikit contoh kode untuk web servicenya yah tapi pake PHP...
<?php class Utils{ public static function convertToJSON($queryResult){ $output=null; while($e=@mysql_fetch_assoc($queryResult)) $output[]=$e; if($output==null){ echo "no query"; }else{ echo json_encode($output); } } } ?>
Nah untuk penggunaannya bisa digunakan seperti ini ..
$query="Select * From month; $database=new Database(); $queryResult=$database->query($query); $resultArray=Utils::convertToJSON($queryResult);
Nah seperti itu setelah itu tinggal memakai method RestClient.connect(url) dan mengubahnya menjadi JSONArray yang bisa kita gunakan lebih lanjut lagi dikemudian...
Nah untuk sementara itu dulu kalau ada yang mau ditanyakan silahkan dikomentarin