BAB 4: HTTP CONNECTION Aplikasi yang dibangun pada Android sering sekali diperuntukkan agar terhubung langsung dengan internet, misalnya untuk menjelajah internet, kirim mengirim email, atau menampilkan isi suatu situs berita lewat RSS. Pembahasan selanjutnya adalah menghubungkan aplikasi Android dengan initernet dengan menggunakan hppt connection. Proyek kedelapan berikut ini adalah http connection, di sini Anda akan belajar bagaimana membuat aplikasi terhubung dengan internet untuk mendownload gambar dan teks, serta menggunakan rss.
MINI CASE 1. Koneksi HTTP Step 1 Pada Eclipse pilih File » New » Other seperti gambar berikut:
www.aplysit.com | FB Bandung: Aplysit Bandung | FB Medan: AplysIT Medan | 1
Step 2 Kemudian akan muncul sebuah kotak dialog New, dan pilihlah File » Android Project seperti gambar berikut:
Lalu klik Next >
Step 3 Lalu akan dimunculkan jendela New Android Project. Isikan seluruh fieldnya seperti gambar berikut:
www.aplysit.com | FB Bandung: Aplysit Bandung | FB Medan: AplysIT Medan | 2
Lalu klik Finish.
www.aplysit.com | FB Bandung: Aplysit Bandung | FB Medan: AplysIT Medan | 3
Step 4 Lalu pada bagian kiri yaitu panel Package, klik kanan pada proyek http_connection » Run As » 2 Android Application seperti pada gambar berikut:
Step 5 Tunggulah beberapa saat lamanya, dan sebagai hasil akhir akan ditampilan emulator Android seperti gambar berikut ini: www.aplysit.com | FB Bandung: Aplysit Bandung | FB Medan: AplysIT Medan | 4
Karena kita hanya ingin membuktikan bahwa proyek tersebut akan bisa dijalankan, maka hingga pada langkah ini kita sudah yakin bahwa proyek tersebut dapat dijalankan. Tutuplah emulator Android dengan cara melakukan klik tanda X di pojok kanan atas. Step 6 Lakukan extend seluruh file proyek hingga mendapatkan AndroidManifest.xml, dengan cara melakukan klik pada tAnda sehingga diberikan hasil seperti gambar berikut.
www.aplysit.com | FB Bandung: Aplysit Bandung | FB Medan: AplysIT Medan | 5
Step 7 Karena aplikasi akan menggunakan internet maka pada AndroidManifest.xml akan ditambahkan permission. Pada panel Manifest, klik gAnda Androidmanifest.xml seperti pada gambar berikut:
www.aplysit.com | FB Bandung: Aplysit Bandung | FB Medan: AplysIT Medan | 6
Step 8 Lalu modifikasi source code pada AndroidManifest.xml menjadi seperti berikut:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android" package="www.ivan.siregar.biz" Android:versionCode="1" Android:versionName="1.0"> <uses-permission Android:name="Android.permission.INTERNET" />
www.aplysit.com | FB Bandung: Aplysit Bandung | FB Medan: AplysIT Medan | 7
23 24 25 26
<uses-sdk Android:minSdkVersion="7" />
Yang menjadi hal penting untuk dipahami adalah baris 8-9 yang adalah permission code untuk mengakses internet. Lalu jangan lupa menyimpan hasil modifikasi dengan cara menekan tombol CTRL+S
Step 9 Pastikan bahwa hingga saat ini proyek yang dikerjakan dapat http_connection » dijalankan dengan baik. Klik kanan pada Run As » 2 Android Application lalu akan dihasilkan emulator Android. Lalu tutuplah emulator tersebut, dan lanjutkan ke langkah berikut.
Step 10 Pada proyek kali ini kita perlu merubah kode pada main.xml. Pilih main.xml pada pilihan Views.
www.aplysit.com | FB Bandung: Aplysit Bandung | FB Medan: AplysIT Medan | 8
Step 11 Modifikasi source code pada main.xml menjadi seperti berikut:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
Bagian yang dimodifikasi terdapat pada baris yang dicetak tebal, yaitu baris 8-20. Kode pada baris 12 adalah posisi untuk meletakkan gambar. Baris 15-20 juga perlu dimodifikasi sedikit sehingga menjadi seperti contoh tersebut.
Step 12 Lakukan perubahan kode program. Caranya pada panel Package, klik http_connection.java lalu modifikasi isinya sehingga menjadi seperti kode sumber berikut:
1
package www.ivan.siregar.biz;
www.aplysit.com | FB Bandung: Aplysit Bandung | FB Medan: AplysIT Medan | 9
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
import import import import import import
java.io.IOException; java.io.InputStream; java.io.InputStreamReader; java.net.HttpURLConnection; java.net.URL; java.net.URLConnection;
import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import import import import import import import import import
org.w3c.dom.Document; org.w3c.dom.Element; org.w3c.dom.Node; org.w3c.dom.NodeList; org.xml.sax.SAXException; Android.app.Activity; Android.graphics.Bitmap; Android.graphics.BitmapFactory; Android.os.Bundle;
import Android.widget.ImageView; import Android.widget.TextView; import Android.widget.Toast; public class http_connection extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Bitmap bitmap = DownloadImage("http://static.technorati.com/09/12/13/2291/Android.jpg"); ImageView img = (ImageView) findViewById(R.id.img); img.setImageBitmap(bitmap); } private InputStream OpenHttpConnection(String urlString) throws IOException { InputStream in = null; int response = -1; URL url = new URL(urlString); URLConnection conn = url.openConnection(); if (!(conn instanceof HttpURLConnection)) throw new IOException("Not an HTTP connection"); try{ HttpURLConnection httpConn = (HttpURLConnection) conn; httpConn.setAllowUserInteraction(false); httpConn.setInstanceFollowRedirects(true); httpConn.setRequestMethod("GET");
www.aplysit.com | FB Bandung: Aplysit Bandung | FB Medan: AplysIT Medan | 10
61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
httpConn.connect(); response = httpConn.getResponseCode(); if (response == HttpURLConnection.HTTP_OK) { in = httpConn.getInputStream(); } } catch (Exception ex) { throw new IOException("Error connecting"); } return in; } private Bitmap DownloadImage(String URL) { Bitmap bitmap = null; InputStream in = null; try { in = OpenHttpConnection(URL); bitmap = BitmapFactory.decodeStream(in); in.close(); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } return bitmap; } }
Disini kita membuat class OpenHttpConnection pada baris 44-73 untuk menghubungkan ke URl server, sedangkan pada baris 7589 adalah class untuk mendownload gambar dari internet. Kali ini kita akan mencoba mendownload gambar dari internet maka perlu ditambah kode seperti pada baris 37-40. Lalu simpan hasil modifikasi dengan CTRL+S Tips: Jika Anda lupa melakukan import library yang terdapat pada bagian atas source code pada baris 3-26, maka pada area kerja tekan tombol CTRL+SHIFT+O dan sebagai hasilnya, pada bagian atas untuk perintah import secara otomatis ditambahkan seluruh library yang dibutuhkan. Jika Anda ingin mencoba, hapus satu baris perintah import, lalu tekan tombol CTRL+SHIFT+O, maka yang telah dihapus tadi akan ditambahkan secara otomatis.
www.aplysit.com | FB Bandung: Aplysit Bandung | FB Medan: AplysIT Medan | 11
Step 13 Klik kanan pada http_connection » Run As » 2 Android Application lalu akan dihasilkan emulator Android, seperti gambar berikut ini.
Klik tombol MENU dan pada screen akan ditampilkan hasil proyek seperti gambar berikut ini. Jika halaman kosong coba klik tAnda return sehingga Anda akan masuk kembali pada aplikasi http_connection untuk mengulang. Jangan lupa komputer Anda harus tersambung ke internet dulu.
www.aplysit.com | FB Bandung: Aplysit Bandung | FB Medan: AplysIT Medan | 12
www.aplysit.com | FB Bandung: Aplysit Bandung | FB Medan: AplysIT Medan | 13
Pada contoh tersebut, terlihat logo Android berhasil didownload dari http://schemas.Android.com/apk/res/Android dan ditampilkan pada screen.
Step 14 Sekarang kita akan mencoba mendownload text, buka kembali http_connection.java Anda dan tambahkan kode seperti ini:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
private String DownloadText(String URL) { int BUFFER_SIZE = 2000; InputStream in = null; try { in = OpenHttpConnection(URL); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); return ""; } InputStreamReader isr = new InputStreamReader(in); int charRead; String str = "";
www.aplysit.com | FB Bandung: Aplysit Bandung | FB Medan: AplysIT Medan | 14
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
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) { // TODO Auto-generated catch block e.printStackTrace(); return ""; } return str; } }
Step 15 Sedangkan pada event OnCreate() http_connection.java tambahkan kode seperti ini:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
di
dalam
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); /*Bitmap bitmap = DownloadImage("http://static.technorati.com/09/12/13/2291/Android.jpg"); ImageView img = (ImageView) findViewById(R.id.img); img.setImageBitmap(bitmap); */ String str = DownloadText("http://www.bolanews.com/index.php/feed/index.1.rss"); TextView txt = (TextView) findViewById(R.id.text); txt.setText(str); }
Lalu simpan hasil modifikasi dengan CTRL+S
www.aplysit.com | FB Bandung: Aplysit Bandung | FB Medan: AplysIT Medan | 15
Step 16 Klik kanan pada http_connection » Run As » 2 Android Application lalu akan dihasilkan emulator Android, seperti gambar berikut ini.
Klik tombol MENU dan pada screen akan ditampilkan hasil proyek seperti gambar berikut ini. Jika halaman kosong coba klik tAnda return dan masuk kembali pada aplikasi http_connection untuk mengulang. Sekali lagi, jangan lupa komputer Anda telah tersambung ke internet
www.aplysit.com | FB Bandung: Aplysit Bandung | FB Medan: AplysIT Medan | 16
www.aplysit.com | FB Bandung: Aplysit Bandung | FB Medan: AplysIT Medan | 17
Step 17 Pada step sebelumnya tadi, Anda sudah mendownload text yang sesungguhnya adalah file rss yang terdapat pada http://www.bolanews.com/index.php/feed/index.1.rss yang dapat diparse menjadi suatu berita namun belum dapat dibaca. Sekarang Anda akan melakukan modifikasi sedikit sehingga berita yang diterima dapat dibaca. Untuk melakukannya tambahkan kode berikut pada http_connection.java Anda
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
private void DownloadRSS(String URL) { InputStream in = null; try { in = OpenHttpConnection(URL); Document doc = null; DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db; try { db = dbf.newDocumentBuilder(); doc = db.parse(in); } catch (ParserConfigurationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SAXException e) { // TODO Auto-generated catch block e.printStackTrace();
www.aplysit.com | FB Bandung: Aplysit Bandung | FB Medan: AplysIT Medan | 18
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
} doc.getDocumentElement().normalize(); //---mengambil semua item nodes--NodeList itemNodes = doc.getElementsByTagName("item"); String strTitle = ""; for (int i = 0; i < itemNodes.getLength(); i++) { Node itemNode = itemNodes.item(i); if (itemNode.getNodeType() == Node.ELEMENT_NODE) { //---merubah Node menjadi Element--Element itemElement = (Element) itemNode; //---mengambil semua
element dibawah - // element--NodeList titleNodes = (itemElement).getElementsByTagName("title"); //--- merubah Node menjadi Element --Element titleElement = (Element) titleNodes.item(0); //---mengambil semua sub Node di bawah element--NodeList textNodes = ((Node) titleElement).getChildNodes(); //---mengambil semua teks pada element--strTitle = ((Node) textNodes.item(0)).getNodeValue(); //---memperlihatkan judul --Toast.makeText(getBaseContext(),strTitle, Toast.LENGTH_SHORT).show(); } } } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); }
Step 18 Sedangkan pada event OnCreate() di dalam http_connection.java rubah dan tambahkan kode seperti ini:
1
public void onCreate(Bundle savedInstanceState)
www.aplysit.com | FB Bandung: Aplysit Bandung | FB Medan: AplysIT Medan | 19
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
{ super.onCreate(savedInstanceState); setContentView(R.layout.main); /*Bitmap bitmap = DownloadImage("http://static.technorati.com/09/12/13/2291/Android.jpg"); ImageView img = (ImageView) findViewById(R.id.img); img.setImageBitmap(bitmap); String str = DownloadText("http://www.bolanews.com/index.php/feed/index.1.rss"); TextView txt = (TextView) findViewById(R.id.text); txt.setText(str); */ DownloadRSS("http://feedproxy.mypolaris.com/indonesia/news"); }
Lalu simpan hasil modifikasi dengan CTRL+S
Step 19 http_connection » Run As » 2 Android Klik kanan pada Application lalu akan dihasilkan emulator Android, seperti gambar berikut ini.
www.aplysit.com | FB Bandung: Aplysit Bandung | FB Medan: AplysIT Medan | 20
Klik tombol MENU dan pada screen akan ditampilkan hasil proyek seperti gambar berikut ini. Jika halaman kosong coba klik tAnda return dan masuk kembali pada aplikasi http_connection untuk mengulang. Jangan lupa computer Anda harus sudah terhubung ke internet.
Klik menu, lalu klik icon http_connection seperti gambar berikut:
www.aplysit.com | FB Bandung: Aplysit Bandung | FB Medan: AplysIT Medan | 21
Tampilkan berikut adalah hasilnya:
www.aplysit.com | FB Bandung: Aplysit Bandung | FB Medan: AplysIT Medan | 22