Tutorial Android Komunikasi dengan Server menggunakan Http

Ada orang yang bilang pakai android tanpa koneksi internet bagaikan minum teh tanpa gula. Anda pasti pernah merasakan betapa nyamannya browsing diandroid, main game diandroid. Download aplikasi dimarket. Untuk cari rumah makan aja buka aplikasi android lalu cari deh rumah makan terdekat dengan lokasi kita. Selain itu kita juga bisa facebook atau twitter tanpa buka browser, tapi melalui aplikasi.

Lho kok bisa berarti aplikasi android itu connect ke servernya facebook dan twitter dong.

Ada beberapa pertanyaan menarik dari beberapa pembaca, yang sepertinya ingin membangun aplikasi android yang menggunakan data dari server.

Ada lagi yang bertanya. Untuk data itu sebaiknya disimpan didatabase local atau server ?

Kalau aplikasi itu hanya digunakan untuk mencatat dan melihat data pribadi (yang diisikan oleh hanya user tersebut) lebih baik datanya disimpan dilocal database. Contohnya Aplikasi AHFinancial Record yang saya buat.

Tetapi apabila datanya digunakan oleh banyak orang, kita input, orang lain juga bisa lihat maka data harus disimpan diserver. Contohnya Aplikasi facebook tadi. Kalau kita update status. Nah teman-teman kita bisa lihat.

Kembali kemateri pokok, bagaimana android berkomunikasi dengan server ?

Untuk berkomunikasi dengan server ada beberapa cara yang dapat kita tempuh yaitu melalui Http connection atau Native Socket Connection.

Pada materi kali ini kita fokus menggunakan Http Connection untuk menghubungkan aplikasi android kita dengan server.

Kalau kita gunakan Http Connection artinya kita harus mempunyai web server. Dalam hal ini umunya Apache, bagi yang sudah pernah belajar php dan mysql harusnya sudah mengenalnya.

Bagi yang belum terinstall apache pada computer atau notebooknya, bisa install XAMPP untuk windows atau LAMP untuk linux  disini akan langsung terinstall Apache, PHP dan MySQL.

Untuk Windows biasanya directory root ada di directory htdoc

Untuk Linux biasanya di /var/www

Kalau kita search di internet untuk format data standar antara aplikasi android dan server biasnya menggunakan XML, JSON

Tapi kita  tidak akan bahas itu saat ini. Goal kita pada tutorial kali ini adalah kita bisa mengirim data ke server lalu server menerima dan memprosesnya kemudian server mengirmkan data ke Aplikasi kita dan Aplikasi kita dapat menerimanya

Untuk mari kita buat Aplikasi untuk Login ke server, disini kita harus menginputkan user dan password. Untuk itu mari kita buat file login.php

01<?php
02    $user = $_GET['user'];//get nilai user from client
03    $password = $_GET['password'];//get nilai pass from client
04    $sret = '';
05 
06    if ($user=='agus' && $password=='android'){
07        $sret = 'Login Success';
08    }else{
09        $sret = 'Login Fail, User dan Password Salah';
10    }
11    echo $sret;
12 
13?>

Dari Script PHP diatas berarti data yang kirim dari Client harus menggunakan method GET. disini akan de cek nilai user dan password, apabila nilai user adalah agus dan password adalah android maka server maka mengirimkan jawaban “Login Sucess”. Apabila nilai user dan passwordnya tidak agus dan android maka server akan amengirimkan jawaban “Login Fail, User dan Password salah.

Seperti kita ketahui dalam modus Http ini ada 2 method yang bisa digunakan yaitu get dan post

Sekarang mari kita buat projectnya

1. Buat New Project, isi keterangan yang dibutuhkan sesuai dengan gambar dibawah ini

Pada saat project pertama kali dibuat ada 3 file penting yang langsung dibuat, yaitu

  • main.xml
  • string.xml
  • MainActivity.java

2. edit file main.xml

01<?xml version="1.0" encoding="utf-8"?>
02<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
03    android:orientation="vertical"
04    android:layout_width="fill_parent"
05    android:layout_height="fill_parent"
06    >
07 
08<TextView
09    android:layout_width="fill_parent"
10    android:layout_height="wrap_content"
11    android:text="Komunikasi Ke Server menggunakan Http"
12    />
13<TextView android:text="User :" android:id="@+id/TextView01" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
14<EditText android:text="" android:id="@+id/txtUser" android:layout_width="fill_parent" android:layout_height="wrap_content" ></EditText>
15<TextView android:text="Password :" android:id="@+id/TextView02" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
16<EditText android:text="" android:id="@+id/txtPassword" android:layout_width="fill_parent" android:layout_height="wrap_content" ></EditText>
17<Button android:text="Login" android:id="@+id/btnLogin" android:layout_width="fill_parent" android:layout_height="wrap_content"></Button>
18<TextView android:text="Status:" android:id="@+id/TextView03" android:layout_width="wrap_content" android:layout_height="wrap_content" ></TextView>
19<EditText android:text="" android:id="@+id/txtStatus" android:layout_width="fill_parent" android:layout_height="wrap_content" android:editable="false"></EditText>
20</LinearLayout>

Pada main.xml ini kita membuat

  • 2 buah EditText untuk Input User dan Password
  • 1 buah Button “Login” sebagai trigger untuk Mengirim data
  • 1 buah EditText untuk Menampilkan hasil kembalian dari server

3. . Edit file MainActivity.java

MainActivity.java adalah pemain utama, yang akan djalankan pada saat applikasi dijalankan. Pada class ini, kita buat untuk dapat membaca data yang diinputkan user dalam hal ini inputan user dan password, kemudan mengirimkannya  ke server pada saat kita klik button login dan menampilkan data yang diterima server.

01package com.agus.android.http;
02 
03/**
04 * Class MainActivity
05 * @version 1.0 Apr 04, 2011
06 * @author Agus Haryanto (agus.superwriter@gmail.com)
08 */
09 
10import java.io.BufferedReader;
11import java.io.InputStream;
12import java.io.InputStreamReader;
13 
14import org.apache.http.HttpResponse;
15import org.apache.http.client.HttpClient;
16import org.apache.http.client.methods.HttpGet;
17import org.apache.http.impl.client.DefaultHttpClient;
18 
19import android.app.Activity;
20import android.os.Bundle;
21import android.util.Log;
22import android.view.View;
23import android.widget.Button;
24import android.widget.EditText;
25 
26public class MainActivity extends Activity {
27    private EditText txtUser;
28    private EditText txtPassword;
29    private EditText txtStatus;
30    private Button btnLogin;
31    private String url = "http://agusharyanto.net/android/login.php";
32    /**
33     * Method yang dipanggil pada saat aplikaasi dijalankan
34     * */
35    @Override
36    public void onCreate(Bundle savedInstanceState) {
37 
38        super.onCreate(savedInstanceState);
39        setContentView(R.layout.main);
40        txtUser = (EditText) findViewById(R.id.txtUser);
41        txtPassword = (EditText) findViewById(R.id.txtPassword);
42        txtStatus = (EditText) findViewById(R.id.txtStatus);
43        btnLogin = (Button) findViewById(R.id.btnLogin);
44        //daftarkan even onClick pada btnLogin
45         btnLogin.setOnClickListener(new Button.OnClickListener(){
46                public void onClick(View v){
47                        url="http://agusharyanto.net/android/login.php";
48                    url +="?user="+txtUser.getText().toString()+"&password="+txtPassword.getText().toString();
49                    getRequest(txtStatus,url);
50                }
51            });
52 
53    }
54 
55    /**
56     * Method untuk Mengirimkan data kes erver
57     * event by button login diklik
58     *
59     * @param view
60     */
61    public void getRequest(EditText txtResult, String SUrl){
62       Log.d("getRequest",Url);
63        HttpClient client = new DefaultHttpClient();
64        HttpGet request = new HttpGet(SUrl);
65        try{
66            HttpResponse response = client.execute(request);
67            txtResult.setText(request(response));
68        }catch(Exception ex){
69            txtResult.setText("Failed Connect to server!");
70        }
71 
72    }
73    /**
74     * Method untuk Menerima data dari server
75     * @param response
76     * @return
77     */
78    public static String request(HttpResponse response){
79        String result = "";
80        try{
81            InputStream in = response.getEntity().getContent();
82            BufferedReader reader = new BufferedReader(new InputStreamReader(in));
83            StringBuilder str = new StringBuilder();
84            String line = null;
85            while((line = reader.readLine()) != null){
86                str.append(line + "\n");
87            }
88            in.close();
89            result = str.toString();
90        }catch(Exception ex){
91            result = "Error";
92        }
93        return result;
94    }
95 
96}

Pada contoh diatas apabila kita menyimpan file login.php di computer atatu notebook kita pada directory htdoc/android

Maka gantilah

private String url = “http://agusharyanto.net/android/login.php”;

dapat diganti dengan

private String url = “http://10.0.2.2/android/login.php”;

atau ganti dengan url server tempat kita menyimpan file login.php

4. Edit File  AndroidManifest.xml

01<?xml version="1.0" encoding="utf-8"?>
02<manifest xmlns:android="http://schemas.android.com/apk/res/android"
03      package="com.agus.android.http"
04      android:versionCode="1"
05      android:versionName="1.0">
06    <application android:icon="@drawable/icon" android:label="@string/app_name">
07        <activity android:name=".MainActivity"
08                  android:label="@string/app_name">
09            <intent-filter>
10                <action android:name="android.intent.action.MAIN" />
11                <category android:name="android.intent.category.LAUNCHER" />
12            </intent-filter>
13        </activity>
14 
15    </application>
16     <uses-permission android:name="android.permission.INTERNET">
17   </uses-permission>
18    <uses-sdk android:minSdkVersion="7" />
19</manifest>

Karena disini kita berkomunikasi dengan server (biasanya menggunakan jalur internet) maka kita harus menambahkan

<uses-permission android:name=“android.permission.INTERNET”> </uses-permission>
5. Semua code telah selesai dibuat, saatnya kita Run Project.

Isi User dengan agus dan password dengan android lalu klik button Login, Server akan menerima data inputan kita dan menjawab permintaan kita dengan mengirimkan data “Kearena User dan Passwordnya benar maka Server akan menjawab dengan “Login Success


Kita coba lagi dengan mengisi User dengan joko lalu password dengan abcd, lalu klik button login  “Karena User dan Passwordnya salah” maka server akan menjawab “Login Fail, User dan Password Salah“.

Satu lagi senjata kita untuk membangun aplikasi yang hebat telah bertambah. Pada artikel ini memang saya fokuskan untuk dasar komunikasi ke server dengan menggunakan Http dengan method Get. Logikanya kalau kita bisa sukses mengakses file PHP yang ada diserver, berarti kita bisa juga mengakses database MySQL tentunya melalui file PHP. Wah kalau dah bisa akses database diserver, kita punya kemampuan untuk buat aplikasi yang berkelas nih.

Jika baru mulai belajar android dianjurkan untuk membaca tutorial

Aplikasi Android Sederhana - Menghitung Luas Persegi Panjang

Semoga Bermanfaat

Agus Haryanto

Sumber : http://developer.android.com

114 comments to Tutorial Android Komunikasi dengan Server menggunakan Http

  • Mansur

    koq saya pake ip android (emulator)…10.0.2.2 (private String url = “http://10.0.2.2/android/login.php”;)
    tetep ga bisa ya terhubung ke server (localhost)xampp..mesti tulisannya Failed to conncet server

  • Mansur

    private String url = “http://10.0.2.2/android/login.php”;
    tetep ga bisa konek ke server xampp (localhost)…kenapa ya gan????mohon pencerahan

  • eksan

    sama seperti mas @hezbi udah di gonta-ganti 10.0.2.2, 127.0.0.1, localhost sampai ke website langsung tetep jawabannya selalu selalu failed connect to server.
    padahal contoh program lain untuk menampilkan berita bisa tampil baik dari http://10.0.2.2 maupun dari website. bedanya di contoh itu memang menggunakan AsyncTask.

    tapi setelah pakai cara http://agusharyanto.net/wordpress/?p=739 ternyata sukses.
    saya menggunakan target-sdk=19

  • Terimakasih mas agus, mau tanya mas jika aplikasi yang akan kita buat sitemnya online dan ofline itu gimana ya mas? apa harus menggunakan 2 database?

  • nila

    pak, saya sudah coba, tapi HttpClient sudah gak bisa di gunakan, jadi saya memakai bantuan library, tapi masih belum bisa konek pak, pak agus bisa bantu ? soalnya untuk tugas akhir

  • terima kasih banyak om.. ini sangat membantu…..!!!!

  • Makasih Gan, membantu Saya dalam pembelajaran Apk Android

  • Dewi NurD

    pak, mau nanya. misal saya pakenya xammp. urlnya saya tuliskan http://localhost/namafolder/.. bisa gak?
    kemudian di androidmanifest itu kan harus diedit menjadi “android.permission.INTERNET”. nah ini kan saya gak konek internet, cuma dari android mau update data di mysql nya Xampp

    lalu bagaimana solusinya? terimakasih

  • Agus Haryanto

    @Dewi NurD, bisa ganti IPnya dengan 10.0.2.2
    coba baca juga rtikel tentang Login dengan Volley di Blog ini.

  • mohammad risky

    mas, misal mau di online kan gmn ?

  • Siska

    Saya sudah coba programmnya tapi tidak bisa dijalankan soalnya pada file MainActivity.java -nya, pada bagian string kebawah/ program untuk menerima dan mengirimkan data ke server itu error. itu masalahnya dimana ya ? terimakasih

  • indra

    Permisi pak, apakah ada tutorial pembuatan aplikasi chatting enkripsi?

  • kalo server saya pake SSL / HTTPS ko engga bisa connect ya?
    solusinya gimana ya om?

  • Egi

    paak, saya sudah coba,saya menggunakan http://10.0.2.2:81/android/login.php, menggunakan 81 karna port yang saya pakai 81, pas saya running ketika di input username dan password di status akan tampil FAILED CONNECT TO SERVER, saya sudah coba alamat ini http://10.0.2.2:81/android/login.php di url emulator bisa, tetapi pas di inpud di aplikasinya tidak , mohon bantuannya ..

Leave a Reply

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>