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

<?php
    $user = $_GET['user'];//get nilai user from client
	$password = $_GET['password'];//get nilai pass from client
	$sret = '';

	if ($user=='agus' && $password=='android'){
		$sret = 'Login Success';
	}else{
		$sret = 'Login Fail, User dan Password Salah';
	}
	echo $sret;

?>

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

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >

<TextView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="Komunikasi Ke Server menggunakan Http"
    />
<TextView android:text="User :" android:id="@+id/TextView01" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
<EditText android:text="" android:id="@+id/txtUser" android:layout_width="fill_parent" android:layout_height="wrap_content" ></EditText>
<TextView android:text="Password :" android:id="@+id/TextView02" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
<EditText android:text="" android:id="@+id/txtPassword" android:layout_width="fill_parent" android:layout_height="wrap_content" ></EditText>
<Button android:text="Login" android:id="@+id/btnLogin" android:layout_width="fill_parent" android:layout_height="wrap_content"></Button>
<TextView android:text="Status:" android:id="@+id/TextView03" android:layout_width="wrap_content" android:layout_height="wrap_content" ></TextView>
<EditText android:text="" android:id="@+id/txtStatus" android:layout_width="fill_parent" android:layout_height="wrap_content" android:editable="false"></EditText>
</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.

package com.agus.android.http;

/**
 * Class MainActivity
 * @version 1.0 Apr 04, 2011
 * @author Agus Haryanto (agus.superwriter@gmail.com)
 * @website http://agusharyanto.net
 */

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;

import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends Activity {
	private EditText txtUser;
	private EditText txtPassword;
	private EditText txtStatus;
	private Button btnLogin;
	private String url = "http://agusharyanto.net/android/login.php";
	/**
	 * Method yang dipanggil pada saat aplikaasi dijalankan
	 * */
	@Override
	public void onCreate(Bundle savedInstanceState) {

		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		txtUser = (EditText) findViewById(R.id.txtUser);
		txtPassword = (EditText) findViewById(R.id.txtPassword);
		txtStatus = (EditText) findViewById(R.id.txtStatus);
		btnLogin = (Button) findViewById(R.id.btnLogin);
		//daftarkan even onClick pada btnLogin
		 btnLogin.setOnClickListener(new Button.OnClickListener(){
	            public void onClick(View v){
                        url="http://agusharyanto.net/android/login.php";
	            	url +="?user="+txtUser.getText().toString()+"&password="+txtPassword.getText().toString();
	                getRequest(txtStatus,url);
	            }
	        });

	}

	/**
	 * Method untuk Mengirimkan data kes erver
	 * event by button login diklik
	 *
	 * @param view
	 */
	public void getRequest(EditText txtResult, String SUrl){
       Log.d("getRequest",Url);
        HttpClient client = new DefaultHttpClient();
        HttpGet request = new HttpGet(SUrl);
        try{
            HttpResponse response = client.execute(request);
            txtResult.setText(request(response));
        }catch(Exception ex){
            txtResult.setText("Failed Connect to server!");
        }

    }
	/**
	 * Method untuk Menerima data dari server
	 * @param response
	 * @return
	 */
	public static String request(HttpResponse response){
        String result = "";
        try{
            InputStream in = response.getEntity().getContent();
            BufferedReader reader = new BufferedReader(new InputStreamReader(in));
            StringBuilder str = new StringBuilder();
            String line = null;
            while((line = reader.readLine()) != null){
                str.append(line + "\n");
            }
            in.close();
            result = str.toString();
        }catch(Exception ex){
            result = "Error";
        }
        return result;
    }

}

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

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.agus.android.http"
      android:versionCode="1"
      android:versionName="1.0">
    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".MainActivity"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    </application>
     <uses-permission android:name="android.permission.INTERNET">
   </uses-permission>
    <uses-sdk android:minSdkVersion="7" />
</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

  • ican

    bisa bikin aplikasi bisnis dong yah mas make ini ? nice mas

  • giTOY

    Kalo dibuat apk databasenya ngikut gak mas ?

  • aku terus update postingnya lho! tapi kalo boleh saya usul diprogramnya dibanyakin komentar untuk menjelaskan fungsi-fungsi source code nya karna masih banyak yang belum ngerti kegunaan kodenya apalagi newbi! terutama di .java salam http://www.ruangilmu17.wordpress.com

  • van Napo

    mas kenapa ya aplikasi yang saya buat pas dicoba di hp android tampilan layoutnya berantakan ya…..!!
    gak penuh mas, cuma setengahnya!!
    saya bangun layoutnya pake AbsoluteLayout….

    pas saya coba buat aplikasi sederhana pake LinearLayout , hasilnya pas mas!!

    solusinya apa ya mas, biar tampilan program saya tetep baik dengan penggunaan AbsoluteLayout.
    so’alnya , kalo harus diubah lagi repot banget mas!!
    Saya bikin teka-teki silang!!
    kalo saya ubah jadi linearLayout, nanti widget EditTextnya berantakan.

    Terima kasih mas!!
    kalo bisa dibales ke email saya aja mas!!
    pan_dio.ovie@yahoo.co.id

  • ashura

    mas agus, mohon bantuannya nih, saya pgn bkin tutorial ttg memperbaiki PC, tapi klo saya masukin satu2 cara2nya di layoutnya (xml) kn ribet. jadi pgnnya saya bkin layout yg isinya button2 saja, terus ktika button itu di klik maka dia akan mengakses web, tapi webnya localhost aja. bisa mas? nanti webnya jg di pindahin ke hape mas. klo bisa tolong kirimin tutorialnya ke herdymansyahedi@gmail.com tq mas 😀

  • andriyanto

    maaf pak mau tanya…saya sudah ikuti langkah dari bapak…tapi setiap saya mencoba untuk log in gagal,selalu masuk exception Failed Connect to server!….saya menggunakan localhost….terimakasih sebelumnya pak…

  • Agus Haryanto

    @andriyanto, kalau dilocalhost, Maka gantilah
    private String url = “http://agusharyanto.net/android/login.php”;
    dapat diganti dengan
    private String url = “http://10.0.0.2/android/login.php”;

  • canrakerta

    mas Agus, kalau misalkan kita pakai localhost, apakah perlu ada permission internetnya ?
    Permasalahan yg saya dapat selalu failed connect to server mas, kira2 masalahnya di mana ya ?
    terimakasih mas sebelumnya..

  • Agus Haryanto

    @canrakerta, walaupun loclahost tetap harus didaftarkan permission internetnya

  • canrakerta

    terimakasih sebelumnya mas, tp kondisi saya sama persis seperti mas andriyanto, tetap masuk ke exception Failed Connect to server. Kira-kira ada kesalahan di mana ya?

  • Agus Haryanto

    @canrakerta, testnya dari emulator atau handset langsung, kalau dari emulator. ganti localhost jadi 10.0.2.2 sehing deklarasi url private String url = “http://10.0.2.2/android/login.php”;.
    apakah apachenya sudah nyala ?
    cobatest dari browser http://10.0.2.2/localhost/login.php

  • canrakerta

    saya pake emulator dan apachenya juga sudah running..
    mungkin maksudnya tes dari browser dengan link ini http://10.0.0.2/android/login.php ya mas?
    kalau saya pake 10.0.0.2 tidak bisa mas, kecuali saya pake 127.0.0.1 .

  • canrakerta

    alhamdulillah problem Failed Connect to Servernya sudah solved mas, ternyata bisa running ketika localhostnya diganti pake ip 10.0.2.2 mas..tp masalahnya sekarang muncul lagi mas, seperti gambar ini

  • mas, boleh minta alamat emailnya gak..? hee

  • Agus Haryanto

    @canrakerta, betul untuk localhost diandroid http:/10.0.2.2 itu bukan error, coba test sekali lagi

  • Pak… maaf…
    Pas request data dari server…
    krn prosesnya lama
    gimana cara menambahkan progressbar…
    jadi ada interaksinya…

    atau mungkin ada referensi progressbar yg mengambil data lewat http

    sy udah praktekkan yg di atas alhamdulillah sukses cuman menambahkan progressbarnya blm bisa2
    Mohon bantuannya… ya… 🙂

  • Cho

    mas, mau tanya klo da tag html jg ikt ke display ya.
    mas buat transfer lewat xml truz di bikin list tuk next tutor ya.

  • andriyanto

    maaf pak saya bertanya lagi….setiap saya masukkan username dan pass yang salah munculnya “error” (masuk dalam exceptiion method request)…setelah saya getMessage() ternyata disebabkan oleh “content has been consumed”….nah kira2 saya salah pada bagian mana pak?…terimakasih sebelumnya

  • Ahmed

    LIsten to me canrakerta i think that i find your connection problem. you need to indicate to the port used from your server; for exemple i use the port 200
    http://10.0.2.2:200/android/login.php

    it work succefully , so try that and indicate the number of port used.

    think of Agus Haryanto for his post 🙂

  • Prasetyawan

    Mas, saya mau tanya kenapa saya ada error “The Application .. Has Stopped Unexpectedly.Please Try Again” ? sebelumnya terima kasih 🙂

  • itu kan methodnya GET nah kalo POST gimana mas ? trus mau tanya satu 1 lagi .. kalo clientnya itu CURL juga gimana .. soalnya saya uda server dan si client harus menggunakan curl

  • andriyanto

    mencoba membantu menjawab mas puji rahmadiyanto, kalo methodnya mau diganti post tinggal dirubah saja di php-nya menjadi post. kemudian tambah import-an import org.apache.http.client.methods.HttpPost; lalu pada syntax HttpGet request = new HttpGet(url); coba diganti menjadi HttpPost…maaf kalau kurang jelas

  • Efori

    Mas, mau tanya
    file yang di server tu hanya saja ya yaitu file login.php
    atau da file yg lain.???
    termaksh atas artikeln ya..!

  • renita widiastari

    makasih banyak mas ilmunya… kalo mau mengambil data dari FTP gimana ya… ditunggu jawabanya.. makasih

  • only

    wah mas makasi bgt ni, alhamdulillah saya jadi bisa login menggunakan mysql.. 😀
    mas, kalo nampilin database server lewat xml parser itu gmn ya??
    mudah2an ada tutorialnya lagi.. 😀

  • lolin

    mas mau nanya nih, kalo misalnya kita mau dapet id sessionnya trus di simpan di appnya caranya gmana ya?

  • lolin

    makasi banyak atas tutorilnya mas, sangat bermanfaat 🙂

    mas, mau nanya nih, misalnya mau buat app login yzng pakai session, cara untuk dapat id sessionnya dari server dan untuk close koneksi sessionnyanya gimana ya?

    makasi ..:)

  • Gimana mas kalau bacanya dari database?
    Jadi username dan passwordnya dari phpmyadmin atau MYSQL.

  • dieni

    Mas, makasih tutorialnya..
    Tapi saya masih belum bisa koneksi ke server nih mas.

    Trik dari teman2 udah saya coba juga. Tapi belum juga berhasil.
    kalau saya pakai http://10.0.0.2/android/login.php ( The connection has timed out
    The server at 10.0.0.2 is taking too long to respond.)

    akhrinya saya gunakan “http://127.0.0.1/android/login.php”
    di javanya juga saya ubah seperti diatas. hasil yg nampil (Login Fail, User dan Password Salah).

    Mungkin agan (anak gaul Android) pada tahu. MOhon sharenya yaa…

  • Agus Haryanto

    @dieni, coba urlnya ganti dengan http://10.0.2.2/android/login.php
    kalau nggak jalan juga coba test dari browser firefox atau google chrome
    http://localhost/android/login.php

  • Cribs

    mas saya mau tanya di bagian main .java ada coding ?user &password
    bisa dijelaskan beda dan fungsinya???

  • danisa

    pak mau nanya kalo di localhost pake URL nya http://10.0.2.2/android/login.php ini sih berhasil mang pak ,tapi kalo pake alamat website yg pake wwww gabisa yah pak ?
    untuk semua website saya coba gak bisa ..
    mohon bantuanya yahhh agan2 😀

  • Cribs

    tanya sedikit
    saya sudah bikin classnya tetapi bukan sebagai main class
    malah tidak terjadi apa2
    kira2 kenapa ya????

  • Cribs

    mas yang di bagian url itu bagaimana caranya kalo data yang dimasukkan mengandung spasi??
    kalo dari yang saya coba sih error bagaimana caranya biar tidak error
    mohon pencerahannya…….

  • pak saya mau nanya kalau ambil data dari database gimana ya ? terima kasih

  • ekarock26

    pak buat nampilin data yg udah tersimpan ke dalam database ke dalam bentuk list/tabel gimana pak???
    btw buat tmen” yg pake localhost ganti az dengan 10.0.2.2 psti bisa tpi harus terkoneksi dengan internet (pengalaman saya)

    terima kasih sebelumnya pak…

  • hengdon

    mas saya dah coba ganti localhostnya dengan 10.0.2.2 tetep koneksi ke server gagal gimana yah mas???

  • Om mw nanya dong. kan saya di localhost udh bsa connect ya. nah saya udh upload ke serverhost saya di https://widiandroid.com:2078/android/login.php tp qo malah muncul xmlny di emulator ya. kan klo punya om agus di http://agusharyanto.net/android/login.php pas di klik link ny muncul output phpny thu. mohon bimbinganny Om… terimakasih

  • rizky

    Mas mau nanya kalau kita mau ngambil data dari web servise databasenya pake mysql gimana tuh ????

  • teguh

    mas saya dah buat, tapi error.
    ada message box tulisannya the application has stopped unexpectedly. please try again.
    trus force close.

    kalo itu apa yang salah ya ?
    mohon pencerahannya.

  • teguh

    mas saya dah buat, tapi pas di running qo yang muncul di kotak status malah kaya dokumen html gitu ya??

  • mas bro, ane boleh minta yg duah bisa jalan blom, klo bleh nih e-mail ane mas bro :
    mmfrindo@yahoo.co.id

    trima kasih sebelumnya

  • m teguh

    Pak… request nyimpen cookie dong… hehe
    nanggung nih kalo sampe Http.. 😀
    matur nuwun..

  • mas.. itu kalo file SQL nya mau dipanggil dari server. di taruh dimna file sql nya? di localhost

  • evi

    master,,
    minta pencerahan sedikitt yaaa,,
    kok emulator saya ga nyambung ya ma eclipsenya?
    klomisalnya mau jalanin aplikasi dengan emulator,,
    emulator jalan normal,, tapii aplikasi yang uda saya create ga ada,,
    bingung master,,
    tolong pencerahan nnya ya,,
    ke email saya,,
    makasiii

  • ampahboyz

    saya bingung kalo menampilkan dari dari mysql ke android spinner, bagaimana cara?mohon bimbingannya pak..

  • mas bagmna jika menghubungkan website yg kita buat sudengan android…

  • rizky

    mas klu buat ngrim gambar gimana sama video

  • lisa

    mz,,ne sya udah aplikasikan program mz agus ke android smua oke tapi giliran dimasukin username agus dan password android hasilnya ada peringatanthe application AndroidHttp(process com.agus.android.http) has stopped unexpectedly.try again.force close,mhon bmbngannya ya mz,,krna bwt bhan sya bsk tgl10 jan pndadaran

  • lisa

    nah eror saya sama seperti mtegu diatas itu mz,,,,knpa ya mz ??

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>