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

  • Dear mas agus,

    saya sudah coba buat aplikasi berdasarkan tutorial yang mas berikan tapi begitu saya running terdapat error ketika meng-eksekusi tombol login, setelah saya coba2 rubah sana-sini dan akhirnya mentok (lol), saya coba tanya kepada teman, ternyata dari script login.php yang mas agus berikan tidak dapat dieksekusi dan alhasil aplikasi stopped unexpectedly -_-
    solusinya :

    if ($user==’agus’ && $password==’android’) saya ganti dengan if ($user==”agus” && $password==”android”) dan sukses 🙂

    Untuk teman2 yang mengalami masalah di URL, bisa coba URL : http://sabele.id.or.id/login.php (saya buat sengaja buat tutorial, hehe)

    Eniwey Terima kasih untuk mas agus Semoga makin semangat bagi2 tutorialnya mas..

  • ksap27

    sudah dicoba..
    Dan sukses mas, terima kasih tutorialnya..

  • Andri

    trims tutorialny mas.
    gmn klo menggunakan HTTPS mas? bagian mana yg perlu dimodifikasi?

  • jankrik

    ms mau tanya klau setelah sukses login trus buka halaman baru tu gimana ya

  • kay

    itu kan berasal dari web server yg kita bikin. .
    gmn klo kita mw nampilin suatu hasil data dari web org lain

    misal
    kita masukin username & password
    mka nanti muncul semua identitas kita, misal ny bgtu
    bsa gx gan ??
    yg mna hasil ny itu bsa tampil d dalam app yg kta buat

    terima ksaih

  • Gan koq saya coba selalu force close saya coba apachenya stand alone maksudnya dalam 1 komputer antara apache,develpe eclipse+sdknya dalam 1 komputer pas waktu coding di eclipse g ada pesen error tetapi waktu saya jalankan di sdkmanager androidnya selalu force close ketika tombol login dijalankan..
    thx sebelumnya atas jawabanya

  • Agus Haryanto

    @kay, secara konsep dari android bisa akses ke webserver mana saja. yang penting secara jaringan dapat terhubung dan diberikan hak akses oleh yang punya webserver

  • Agus Haryanto

    @fadly robi, untukk addressnya kalau loaclhost gunakan http://10.0.2.2

  • gan koq masih tetep g bsa ya??
    blh mnta alamat emailnya gan br source code saya tk krim ke email agan agus hariyanto..
    karena saya berharap banget bantuan agan u/ tgas kuliah saya..
    terima kasih sebelumnya

  • laysa

    assalamualaikum agan2 mau tanya , saya baru saja membaca dan mempraktekan tutorialnya, gini pak ada yang error, waktu saya masukan user tanpa password itu bisa ada peringatan bahwa username atau password salah tapi ketika password disi dan di klik tombol login, maka androidnya tiba2 keluar sendiri dan tulisanya itu “The Application .. Has Stopped Unexpectedly.Please Try Again” itukenapa ya pak,, mohon pencerahanya terimakasih banayk

  • mas agus, saya sudah berhasil terhubung dengan server xampp dengan emulator android, nah bagaimanan caranya supaya saya bisa mengakses xampp (localhost) dengan menggunakan hp saya ? thanks.

  • Pak Agus, kenapa kalo saya run hasil nya selalu begini:

    The application Login melalui PHP(process agus.haryanto.login) has stopped unexpectedly. Please try again.

    Force Close

  • Mantap Gan, ane sedot ya… 😀 thanks

  • diko89

    maksh share infonya mas.. mas sya mau tnya kalo untuk masuk ke mikrotik via android bagaimana membuat instannya mas…. API nya gt. mohon pencerahannya

  • Farid

    untuk elviana coba waktu memasukkan input itu diusahakan tanpa ada spasi soalnya itu sensitiv dulu saya coba tutorial ini dan menemukan hal yang sama seperti anda,

  • syuk

    kok ga bisa yaaa??
    malah unexpectedlu..??

  • Saya sdh ketemu caranya gan ternyata kl ada spasi antara username dan password pasti force close trs cara ngakalin supaya ada pengecekannya gmn gan gmn kl dkasih message jgn ada spasi gtu??
    terus untuk merubah character passwornya menjadi * gmn caranya gan??
    maklum saya masih newbie banget
    Terima kasih sebelumnya atas responya.

  • mas, saya run dan berhasil..jika dimasukkan username dan password yang benar maka status akan sukses….
    namun saat saya masukkan username atau password yang salah maka status fail kemudian saya ulangi dengan memasukkan yang benar, status nya tetap failed ya mas??? itu salah di bagian mana ya mas? mohon pencerahannya

  • atau aplikasi itu hanya skali aja bisa dijalankan nya ya mas….? maksud saya, jika yang pertama kali dimasukkan sukses maka tidak bisa lagi mencoba untuk data yang salah,,,status nya akan tetap sama yaitu sukses…. dan demikian sebaliknya…jika pertama sekali saya masukkan data yang salah dan saya ulang dengan mengetikkan data yang benar, hasilnya akan tetap fault 🙁

  • maap mas… sebenarnya tidak ada masalah…cuman masalah di koneksi nya mungkin…soalnya setelah dicobacoba aplikasi bisa sekali di run masukkan data yang saalah status failed kemudian masukkan data yang benar hasil nya akan success..makasi ya mas 🙂

  • mas.. minta email nya dong

  • asrul

    mas agus, klau menghubungkannya dengan google cloud service apa konsepnya sama ??
    apa bisa pake HTTP connection ??

  • myusro

    Great and simple tutorial,
    Cuma ada sedikit koreksi untuk baris 62 : Log.d(“getRequest”,Url); seharusnya ditulis Log.d(“getRequest”,url); (dengan huruf kecil semua untuk ‘url’)
    Trims Mas Agus Haryanto

  • ERROR disana sini pak

  • toms

    Trima kasih mas atas tutorialnya, sangat bagus sekali.
    sy sdh ikutin sourse code yang mas agus tulis, khususnya coding php.
    tapi ketika dibuka di firefox keluar tulisan :

    Notice: Undefined index: user in C:\xampp\htdocs\android\login.php on line 2

    Notice: Undefined index: password in C:\xampp\htdocs\android\login.php on line 3
    Login Fail, User dan Password Salah

    Apa memang seperti ini keluaran di firefoxnya? ditunggu jawabannya, atau langsung ke email saya vansit_sbj@yahoo.com. trims.

  • Astri

    mau tanya kalau misalnya localhost saya portnya ganti jadi yang lain, itu harus dicantumin juga gak?
    apakah jadi http://10.0.2.2:9090 ?

  • Agus Haryanto

    @Astri, ia harus mencantumkan port

  • Nurul

    Mas,,hasil yang ditampilkan pada kolom contoh itu kan “Login Success” atau “Login Fail”….Sedangkan aplikasi yang sedang saya buat ini hasil yg ditampilkan pada kolom tersebut merupakan data base dalam bentuk xml. contohnya:
    Lala
    lala lili

    Gimana caranya buat ambil database tersebut untuk dipindahkan ke halaman yang bru dan tampilannya menjadi:
    Nama: Lala lili

    Terima kasih mas

  • Nurul

    Mas,,hasil yang ditampilkan pada kolom contoh itu kan “Login Success” atau “Login Fail”….Sedangkan aplikasi yang sedang saya buat ini hasil yg ditampilkan pada kolom tersebut merupakan data base dalam bentuk xml. contohnya:
    Lala
    lala lili

    Gimana caranya buat ambil database tersebut untuk dipindahkan ke halaman yang bru dan tampilannya menjadi:
    Nama: Lala lili

    Terima kasih mas

  • miko

    mas… kok setiap saya running di emulator, muncul pesen error dan trus nutup sendiri pas njalanin script “HttpResponse response = client.execute(request);” ..
    kira2 malsahnya dimana mas ya … makasih

  • morugakiro

    mas sya mau tanya donk,,..
    saya ingin buat menu pencarian di android
    mencari data dari database server gmn ya?

  • Agus Haryanto

    @morugakiro, Mudah saja tinggal mainkan di PHPnya coba pelajari menampilkan data ngan PHP dan MySQL nah nanti tinggal kita mainkan querynya saja.

  • Matthew

    Status “Failed Connect to Server!”
    Itu kira2 knp ya bro?

  • Agus Haryanto

    @Matthew, berarti koneksi ke servernya gagal. coba dari browser android dulu lalu akses addressnya dari situ.

  • achunk

    di eclipse kalo mau pack proyek gmana ya?

  • saya tertarik melihat pertanyaan Kay

    “misal
    kita masukin username & password
    mka nanti muncul semua identitas kita, misal ny bgtu
    bsa gx gan ??
    yg mna hasil ny itu bsa tampil d dalam app yg kta buat”

    kalau boleh tahu bagaimana kita bisa tahu url server user & password yg di tujuh dari web lain, sebagai contoh login user & password kaskus, bagaimana bisa membaca / konek ke server login kaskus.

  • sufian

    Bagaimana errornya di php

    Notice: Undefined index: user in C:\xampp\htdocs\php\login.php on line 2

    Notice: Undefined index: Password in C:\xampp\htdocs\php\login.php on line 3

    Notice: Undefined variable: User in C:\xampp\htdocs\php\login.php on line 6
    Login Fail, User dan Password Salah

    apakah cara solusinya teman2..

  • Ju

    Mas, saya sudah coba di notebook dan berhasil. namun saat dijalankan di hp androidnya tidak berhasil. kenapa ya?

  • Ryan

    assalamualaikum pa,, saya mau tanya, saya sudah coba tutorialnya tapi masih ada kendala, di cek browser android bisa, tapi pas di apk gagal terus kenapa yah ?

    makasih sebelumnya

  • Agus Haryanto

    @Ryan, coba koneksi keservernya ditambahkan assynctask

  • Adit

    pak agus, saya ada masalah di coding javanya
    untuk “pulic static string request(HttpResponse response){….”
    keterangan errornya “this method must return a result of type String”
    kira kira kenapa ya?
    masi newbie pak hehehe
    trimakasih sebelumnya 🙂

  • Adit

    maaf saya kurang ngetik kodingnya ternyata hueheuheu udah ga ada error lg mas tinggal di tes 😀

  • devye bellika

    cara munculin usernamenya di halaman berikutnya setelah login berhasil pada kasus multiuser dimana caranya pak?
    boleh minta source code tutorialnya?
    terima kasih

  • imam

    Mas mau nanya,kemarin sy bisa akses lewat localhost tapi tiba-tiba jadi tidak bisa akses ya???

  • Nero

    Saya mau tanya mas,ip url http//10.0.2.2/android sama ga ya kalo dengan http//127.0.0.1/android . karena itu kan sama2 merujuk ke xampp ?
    karena sewaktu saya buka direktori menggunakan browser laptop dengan url http//10.0.2.2/android , selalu ga kebuka.

  • mas mau tanya kalau menghubungkan dengan json itu gimana yaa? saya bingungggg

  • hezbi

    Halo mas Agus.
    Saya ada kendala, url saya sudah ganti-ganti dari 10.0.2.2 lalu 127.0.0.1 dan url langsung dari web. Saya coba di browser device maupun laptop tidak ada masalah. tiap hit menghasilkan repson.
    Namun saat saya coba jalankan dan coba klik login selalu failed connect to server. Bagian mana yang salah ya?

    Terimakasih
    Note: saya menggunakan target-sdk=19

  • evy

    mas mau tanya dong, gimana caranya kalo misal kita punya data inputan berupa form, data yang sudah diinput mau disimpan ke database mysql(server pusat). tetapi waktu menekan tombol simpan, tiba-tiba koneksi internet terputus, nah mau saya gini waktu internet terputus, data yang sudah ada di form tadi disimpan sementara di server lokal. setelah ada koneksi baru dikirim otomatis ke server pusat. mohon pencerahannya mas. bisa tolong kirim jawabannya ke email saya. terima kasih mas

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>