Muhamad Saad Nurul Ishlah, M.Comp.
Program Studi Sistem Informasi, Sekolah Vokasi,
Universitas Pakuan
Tambah perizinan ke Android Manifest
Cek koneksi jaringan
Buat thread pekerja (worker thread)
Implementasi background task
Buat URI
Buat koneksi HTTP
Hubungkan dan Ambil Data
Proses hasil
Parsing hasil
// Izin menggunakan Internet
<uses-permission
android:name="android.permission.INTERNET"/>
// Izin cek status jaringan
<uses-permission
android:name="android.permission.ACCESS_NETWORK_STATE"/>
---
// Cek koneksi jaringan
ConnectivityManager connMgr =
(ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
if (networkInfo != null && networkInfo.isConnected()) {
// Create background thread to connect and get data
new DownloadWebpageTask().execute(stringUrl);
} else {
textView.setText("No network connection available.");
}
---
// Cek jaringan WiFi dan Mobile
NetworkInfo networkInfo =
connMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
boolean isWifiConn = networkInfo.isConnected();
networkInfo =
connMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
boolean isMobileConn = networkInfo.isConnected();
---
// Gunakan worker thread
AsyncTask : kerjaan yang sangat pendek, atau tidak ada hasil yang dikembalikan ke UI
AsyncTaskLoader : untuk kerjaan yang lebih panjang, atau yang mengambalikan ke UI
Background Service : pembahasan lain
---
Dalam background task (contoh di doInBackground())
1. Buat URI
2. Buat koneksi HTTP
3. Unduh Data
---
/* 1. Buat URI untuk request
* contoh API URL: https://www.googleapis.com/books/v1/volumes?q=pride+prejudice&maxResults=5&printType=books
*/
final String BASE_URL =
"https://www.googleapis.com/books/v1/volumes?";
final String QUERY_PARAM = "q";
final String MAX_RESULTS = "maxResults";
final String PRINT_TYPE = "printType";
Uri builtURI = Uri.parse(BASE_URL).buildUpon()
.appendQueryParameter(QUERY_PARAM, "pride+prejudice")
.appendQueryParameter(MAX_RESULTS, "10")
.appendQueryParameter(PRINT_TYPE, "books")
.build();
URL requestURL = new URL(builtURI.toString());
/* 2. Buat koneksi HTTP dan dapatkan respon
*
* Buat koneksi dari nol (from scratch)
* - GUnakan HttpURLConnection
* - Harus dilakukan di thread yang terpisah
* - Membutuhkan InputStreams dan blok try/catch
*
*/
HttpURLConnection conn =
(HttpURLConnection) requestURL.openConnection();
try {
// Konfigurasi koneksi
conn.setReadTimeout(10000 /* milliseconds */);
conn.setConnectTimeout(15000 /* milliseconds */);
conn.setRequestMethod("GET");
conn.setDoInput(true);
// 3. Hubungkan dan dapatkan respon
conn.connect();
int response = conn.getResponseCode();
InputStream is = conn.getInputStream();
String contentAsString = convertIsToString(is, len);
return contentAsString;
} finally {
conn.disconnect();
if (is != null) {
is.close();
}
}
---
/*
* Konversi stream input menjadi string
*/
public String convertIsToString(InputStream stream, int len)
throws IOException, UnsupportedEncodingException {
Reader reader = null;
reader = new InputStreamReader(stream, "UTF-8");
char[] buffer = new char[len];
reader.read(buffer);
return new String(buffer);
}
// Gunakan BufferedReader agar lebih efisien
StringBuilder builder = new StringBuilder();
BufferedReader reader =
new BufferedReader(new InputStreamReader(inputStream));
String line;
while ((line = reader.readLine()) != null) {
builder.append(line + "\n");
}
if (builder.length() == 0) {
return null;
}
resultString = builder.toString();
Parsing hasil menggunakan kelas-kelas pembantu
{
"population": 1252000000,
"country": "India",
"cities": [
"New Delhi",
"Mumbai",
"Kolkata",
"Chennai"
]
}
JSONObject jsonObject = new JSONObject(response);
String nameOfCountry = (String) jsonObject.get("country");
long population = (Long) jsonObject.get("population");
JSONArray listOfCities = (JSONArray) jsonObject.get("cities");
Iterator<String> iterator = listOfCities.iterator();
while (iterator.hasNext()) {
// do something
}
JSON
Java
{
"menu": {
"id": "file",
"value": "File",
"popup": {
"menuitem": [
{"value": "New", "onclick": "CreateNewDoc()"},
{"value": "Open", "onclick": "OpenDoc()"},
{"value": "Close", "onclick": "CloseDoc()"}
]
}
}
}
// Get "onclick" value of the 3rd item in the "menuitem" array
JSONObject data = new JSONObject(responseString);
JSONArray menuItemArray =
data.getJSONArray("menuitem");
JSONObject thirdItem =
menuItemArray.getJSONObject(2);
String onClick = thirdItem.getString("onclick");
JSON
Java
Pustaka Koneksi Klien HTTP
RequestQueue queue = Volley.newRequestQueue(this);
String url ="http://www.google.com";
StringRequest stringRequest = new StringRequest(Request.Method.GET, url,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
// Do something with response
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {}
});
queue.add(stringRequest);
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url("http://publicobject.com/helloworld.txt").build();
client.newCall(request).enqueue(new Callback() {
@Override
public void onResponse(Call call, final Response response)
throws IOException {
try {
String responseData = response.body().string();
JSONObject json = new JSONObject(responseData);
final String owner = json.getString("name");
} catch (JSONException e) {}
}
});
Silahkan diskusikan di forum di e-learning
Diterjemahkan dari slide Android Developer Fundamentasl V2: Internet Connection