-->

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
Facebook Comments

17 komentar

mas, boleh dijelaskan detail tentang tugas akhirnya?sepertinya saya tertarik dengan client-server di android

thanks
hezby islami

Balas

Tugas saya buat semacam penyedia layanan data. Jadi datanya di server semua. Kemudian fetch data dengan format json. Kemudian di androidnya aq olah tuk buat grafik dan tampilan lainnya

Balas

kalo boleh tau untuk mengolah datanya ke dalam bentuk grafik gmna gan ?

Balas

Data diambil dalam format json. Kemudian dari json data ini dia mempunyai id id yang bisa kita convert ke tipe data yang kita inginkan. Tinggal dibuatin array atau list setelah itu tinggal pke library charting deh..

Balas

mau tanya, kalau casenya kaya gini gimana; datanya masukin ke servernya pake android juga. ada tutorial / referensinya?

tar tinggal narik data dari server

Balas

Pake webservice. Dengn method post kita dapat mengirimkan data dari android kita. Pelajari dulu bagaimana webservice itu nanti cara bekerjanya.. Low tetep gak ngerti mgkn nanti bisa kasih tutornya.

Balas

artikelnya bagus mas, saya juga sedang membuat project yang mirip seperti ini.
saya masih belum paham untuk sisi servernya dan cara kerjanya, bisa dijelaskan lebih lanjut mas? disertakan pula source code lengkapnya

Balas

oh ya mksh nanti kalo ada waktu saya ulas

Balas

hmm kalo mau nampilin data dari mysql ke listview gmn ya? banyak org bilang pake JSON juga, nah implementasinya gmn? thanks :)

Balas

mas, saya sama mahasiswa juga yang bergerak di bidang pengamanan informasi.
untuk koneksi servernya make SSH atau apa ya?
boleh minta projectnya ga mas? kebetulan saya mau ngambil android client-server basis ssh buat tugas akhir..
email saya..
siswasandi@gmail.com

makasih mas, mohon ijin bimbingannya..

Balas

@siswadi wah maaf ane belum tahu SSH nih.. hehe..

yang ane pake kyaknya belum deh.. jadi masih basicnya aja

oke ntar ane kirim

Balas

.kalau pake ssh, bikin aja di servernya key public.ntar tinggal di mainin di php nya aja
.yang di lampp nya harus root, jangan nobody

Balas

mas,, saya juga tertarik dennga artikel anda.. bagaimana bila data json berubah setiap 10 detik ?. apakah dari android kita bisa memperbaharui data json tersebut sesaui dengan data terbaru ? kalau bisa bagaimana caranya ?

Balas

@kafi : Bisa saja kok asal strukturnya tetap sama.. buat aja service untuk fetch tiap 10 detik

Balas

mas,,,saya pengen buat pengembangan dr aplikasi di mas, saya mhon untuk minta source code nya,,,
email saya...
candulmania@gmail.com,,,
terima kasih mas,,,
mohon bimbingannya

Balas
Komentar ini telah dihapus oleh pengarang.

ini aplikasi nya hampir mirip nih http://cyberprotol.blogspot.co.id/2015/11/aplikasi-e-learning-menggunakan-web.html

Balas