Networking - Men-download Plain-Text

Selain men-download file binary, kita juga bisa men-download isi plain-text. Misalnya kita mungkin ingin mengakses suatu web service yang mengembalikan suatu string dari quotes secara acak. Latihan berikut ini menunjukkan bagaimana kita bisa mendownload suatu string dari suatu web service di app kita.

1. Kita masih menggunakan project dari latihan sebelumnya. Kemudian kita tambahkan file 'MainActivity.java' (dan modifikasi pada bagian method 'onCretae()' )seperti berikut:
private String DownloadText(String URL)
{
int BUFFER_SIZE = 2000;
InputStream in = null;
try {
in = OpenHttpConnection(URL);
} catch (IOException e) {
Log.d("NetworkingActivity", e.getLocalizedMessage());
return "";
}

InputStreamReader isr = new InputStreamReader(in);
int charRead;
String str = "";
char[] inputBuffer = new char[BUFFER_SIZE];
try {
while ((charRead = isr.read(inputBuffer))>0) {
//---convert the chars to a String---
String readString =
String.copyValueOf(inputBuffer, 0, charRead);
str += readString;
inputBuffer = new char[BUFFER_SIZE];
}
in.close();
} catch (IOException e) {
Log.d("NetworkingActivity", e.getLocalizedMessage());
return "";
}
return str;
}

private class DownloadTextTask extends AsyncTask {
protected String doInBackground(String... urls) {
return DownloadText(urls[0]);
}

@Override
protected void onPostExecute(String result) {
Toast.makeText(getBaseContext(), result, Toast.LENGTH_LONG).show();
}
}

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new DownloadTextTask().execute("http://quotesondesign.com/wp-json/posts?filter[orderby]=rand&filter[posts_per_page]=1");
}
Kemudian jalankan di emulator. Hasilnya adalah seperti berikut:
Men-download file plain-text
Penjelasan:

Method 'DownloadText()' mengambil URL dari file text untuk di-download dan kemudian mengembalikan string dari file text yang di-download tersebut. Kode itu pada dasarnya membuka koneksi HTTP ke server dan kemudian menggunakan object 'InputStreamReader' untuk membaca tiap-tiap karakter dari stream dan kemudian menyimpannya dalam object 'String'. Seperti sudah dibahas dalam latihan sebelumnya, kita harus membuat subclass dari class AsyncTask untuk memanggil method 'DownloadText()' secara asynchronous.

No comments: