Android PHP dan MYSQL Database bagian 1

Bagaimana aplikasi Android bisa berkomunikasi dengan Mysql database?

Pertanyaan di atas banyak bergentayangan di internet. Jawaban_nya bervariasi sesuai dengan pengalaman orang yang menjawabnya. Di sini saya hanya ingin ikut meramaikan dan ingin melanjutkan percakapan tentang hal tesebut karena menurut saya hal itu adalah sangat penting sebagai basis untuk berkiprah dalam dunia develop aplikasi android.

Banyak developer yang ingin mejawab pertanyaan tsb, tapi jawaban-nya tak ada yang singkat tapi semuanya  panjang dan berliku karena memang develop aplikasi memakan waktu panjang dan dengan jalan yang penuh liku. Itulah indahnya kalau mau jadi developer, selalu ada tantangan setiap saat.
Saya akan mencoba menjelaskan-nya sebisa saya dan sesingkat mungkin. Semoga ada yang lain akan menambahkan-nya.
Untuk menjawab pertanyaan di atas, saya harus membuat sebuah kasus atau skenario untuk sebuah aplikasi yang sangat singkat, sehingga coding-nya nanti juga akan lebih singkat untuk bisa di telusuri.... developing tak ada yang singkat, kawan...

Kasus yang saya pakai sebagai contoh adalah sebuah forum kecil yang sifatnya sbb:
  1. Registrasi dulu sebelum bisa jadi anggota 
  2. Aplikasi akan menolak meregistrasi dengan nama yang sama
  3. Hanya anggota, yang bisa membaca dan bisa menulis komentar
  4. Setelah jadi anggota harus login dulu sebelum bisa membaca komentar
  5. Pasang kotak utk isi username dan password di halaman login
  6. Di halaman login juga ada tombol 'Registrasi' utk yg belum registrasi
  7. Beri peringatan jikalau login dengan username dan password yang salah
  8. Setelah sukses login bawalah anggota ke halaman komentar
  9. Bubuhkan tombol 'Isi Komentar' untuk mengisi komentar
  10. Bubuhkan tempat untuk tulis 'Judul Komentar' dan 'Isi Komentar
  11. Bubuhkan tombol 'Kirim Komentar' untuk bisa kirim komentar 
  12. Beri peringatan jika 'Judul Komentar' dan 'Isi Komentar'  kosong
Dari daftar tersebut di atas kita bisa mengambil kesimpulan, halaman apa saja yang di butuhkan untuk aplikasi ini.  Di android, sebuah halaman biasanya di representasikan dengan sebuah 'activity' yang cara kerjanya di renda oleh sebuah 'class java'.
Di lihat dari sifat aplikasi tersebut di atas maka kita akan membutuhkan beberapa halaman atau 'activity atau class, antara lain:

  • Halaman Login
  • Halaman Registrasi
  • Halaman Baca Komentar
  • Halaman Tambah  Komentar
  • Halaman JSON 
Halaman JSON
Kita tambahkan halaman JSON (Javascript Object Notation)
JSON adalah language independent artinya ia di mengerti oleh hampir semua bahasa programan sehingga ia sangat cocok menjadi jembatan antara  bahasa program yang berbeda. JSON-lah yang akan bertanggung jawab agar aplikasi-nya dinamik dan responsive, misalnya memberi peringatan kepada pengguna jikalau mereka masukan password dan username yang salah dll
Silahkan baca tentang json di http://en.wikipedia.org/wiki/JSON

Halaman Login
Halaman login akan ada tempat untuk isi username, password. dan dua buah tombol satunya tombol Login dan yang lain-nya adalah tombol Registrasi.
Ketika tekan tombol login tanpa password maka aplikasi memberikan peringatan kepada pengguna agar mengisi password dan usernamenya. Demikian juga ketika tekan tombol Registrasi tanpa username dan password.

Halaman Baca Komentar
User yang login dengan benar langsung di antar ke halaman Baca Komentar dan pada bagian bawah halaman komentar ada tombol Tambah Komentar agar pengguna bisa ikut berkomentar. Aplikasi akan menolak untuk submit komentar yang kosong dengan memberikan warning.

Halaman-halaman tersebut (terkecuali JSON) akan di bangun di dua sisi. Di sisi klien akan di bangun menggunakan java(android) dan di sisi server akan di bangun menggunakan PHP. (alasan-nya karena PHP teman baik dengan MYSQL).

Apa saja yang di perlukan untuk membangun aplikasi seperti ini
  • Server
  • Android dan Eclipse
  • PHP dan Mysql
Server
Jikalau sudah ada server bayaran, silahkan atur Mysql database-nya disana. Tapi kalau tak bisa bayar server, saya rekomendasikan untuk download server yang free dari internet untuk di pasang di komputer sendiri. Di internet bergentayangan server seperti WAMP ada juga XAMPP. Silahkan pilih menurut selera masing2. Walaupun sudah ada server bayaran, namun untuk develop ada baiknya install server di komputer sendiri agar semua server side code bisa di coba tanpa harus selalu konek ke internet.
Saya akan membicarakan tentang server pada kesempatan lain... semoga

Android dan Eclipse
Download Android dan Eclipse .. free loh...

PHP dan Mysql
Hampir semua server bisa PHP dan Mysql.
Saya berasumsi bahwa anda membaca tutorial ini karena ingin melihat cara kerja aplikasi android, sehingga saya tidak meng-elaborasi lebih jauh tentang PHP, MYSQL dan yang lain-nya. Tapi kalau ingin membaca PHP dan MYSQL silahkan kesana dahulu dengan tekan link yang sudah saya sediakan di atas.

Kembali ke daftar sifat-sifat aplikasi di atas...... Halaman pertama yang harus di bangun tentunya adalah halaman 'Login' ...Kode halaman Login ini akan di representasikan dengan dua buah halaman yaitu sebuah halaman di sisi klien dan sebuah halaman di sisi server. Di sisi server saya beri nama login_nya.php  di bangun dengan php, dan di sisi klien dengan nama ClassUtkLogIn.java  di bangun pakai java. Semua server side script dalam hal ini adalah halaman PHP harus di simpan di dalam sebuah folder dengan nama sesuka hati, tapi di dalam contoh disini saya menamakan folder-nya mysql_android.
Di server XAMPP folder mysql_android tersebut di masukan lagi di dalam folder htdocs, Sedangkan di server lain mungkin di simpan di dalam folder bernama www atau public_html dan lain-lain. Mohon baca petunjuk server-nya

Tapi... sebelum itu buatlah terlebih dahulu databasenya di server dengan nama tampung_data saya sengaja menamakan_nya demikian karena semua data akan di tampung disana, baik data pengguna maupun data komentarnya.
Di dalam database tampung_data tersebut, masukan dua buah table, satunya dengan nama 'tempat_komentar' untuk menampung komentar dengan isi sbb:

CREATE TABLE tempat_komentar
(
komentar_id int(11) UNIQUE AUTO_INCREMENT,
username_nya varchar(64),
judul_komentar varchar(120),
isi_komentar varchar(255)
)

dan table 'anggota' untuk menampung keterangan tentang anggota sbb:

CREATE TABLE anggota
(
anggota_id int(11) UNIQUE AUTO_INCREMENT,
username_nya varchar(64) UNIQUE,
password_nya varchar(120),

)

Berikut adalah isi dari login_nya.php yang harus di simpan di server sebagai server side code


 <?php
//©Vik Sintus Projects
//pasang halaman konfigurasi_nya.php agar
//bisa konek
require("/konfigurasi_nya.php");

if (!empty($_POST)) {

if (empty($_POST['username_nya']) || empty($_POST['password_nya'])) {
        
        
  // kalau 'username' dan 'password' kosong
  // JSON menjawab agar pengguna tahu apa yg terjadi

        $jawaban_nya["berhasil"] = 0;
        $jawaban_nya["tampilkan_pesan"] = "Masukan NamaUser dan PasswordNya!.";
        
  // metode die() akan matikan halaman dan tidak 
  // mengeksekusi kode2 selanjutnya, dan juga akan
  // memperlihatkan parameter2, yaitu JSON data yang
  // akan di parsing oleh android
        die(json_encode($jawaban_nya));
    }
    // ambil info dari user berdasarkan username.
    $query = " 
            SELECT 
                anggota_id, 
                username_nya, 
                password_nya
            FROM anggota 
            WHERE 
                username_nya = :username 
        ";
    
    $parameter_nya = array(
        ':username' => $_POST['username_nya']
    );
    
    try {
        $statement_nya   = $db->prepare($query);
        $result = $statement_nya->execute($parameter_nya);
    }
    catch (PDOException $ex) {
        // utk percobaan, bisa saja menggunaka metode die(); 
        //atau pakai cara berikut untuk menampilkan data dari JSON
        $jawaban_nya["berhasil"] = 0;
        $jawaban_nya["tampilkan_pesan"] = "DatabaseNya salah. Di coba lagi yah!";
        die(json_encode($jawaban_nya));
        
    }
    
    //bikin satu variable utk priksa kebenaran login dan
    //di inisialisasikan dengan false.
    $validasi_identitas = false;
    
 //tarik semua parameter pada 'query' di atas dengan
 //metode fetch()
    $row = $statement_nya->fetch();
    if ($row) {
  //kalau passwordnya di encrypt, maka di lakukan di sini tapi
  //saya bukan ahli encrypt, silahkan baca2 tentang encrypt,
  //disini saya hanya berkepentingan utk 
  //menjalankan script ini sejajar dengan java (android) sehingga
  //saya hanya membandingkan password yg di input dan
  //password yg ada di database
        if ($_POST['password_nya'] === $row['password_nya']) {
            $login_nya_ok = true;
        }
    }
    
    // kalau login-nya berhasil, orangnya di antar ke halaman users 
    // kalau tidak, tampilkan pesan gagal dan tunjukan form lagi 
    if ($login_nya_ok) {
        $jawaban_nya["berhasil"] = 1;
        $jawaban_nya["tampilkan_pesan"] = "LoginNya Berhasil!";
        die(json_encode($jawaban_nya));
    } else {
        $jawaban_nya["berhasil"] = 0;
        $jawaban_nya["tampilkan_pesan"] = "LoginNya Gagal!";
        die(json_encode($jawaban_nya));
    }
} 
else {
 ?>
<h1>Login</h1> 
  <form action="login_nya.php" method="post"> 
      Username:<br /> 
      <input type="text" name="username" placeholder="username" /> 
      <br /><br /> 
      Password:<br /> 
      <input type="password" name="password" placeholder="password" value="" /> 
      <br /><br /> 
      <input type="submit" value="Login" /> 
  </form> 
  <a href="registrasi.php">Register</a>
 <?php
}

?> 
Saya sisipkan penjelasan dalam kode di atas, silahkan telusuri... mereka yang jago PHP pasti tidak asing dengan kode di atas
Di baris pertama ia minta 'require("/konfigurasi_nya.php");' maka berikut adalah isi dari konfigurasi_nya.php
<?php 
    // ©Vik Sintus Projects
    // 4 variable berikut harus cocok dengan yang ada di database
    $username = "root"; 
    $password = ""; 
    $host = "localhost"; 
    $dbname = "tampung_komentar"; 

 // pakai utf8 agar databasenya bisa muat banyak jenis karakter seperti
 // huruf dan agka 
 // silahkan baca2 tentang utf8 di 
 // http://en.wikipedia.org/wiki/UTF-8 
    $pakai_utf8 = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'); 
     
 // bagi mereka yang pintar PHP tentunya tak asing dengan try/catch
 // Metode tersebut di pakai utk menangkap kesalahan pada kode yg
 // bersifat object oriented,
 // pertama di eksekusi dalam 'try' dan kalau memukan kesalahan maka akan
 // berhenti eksekusi dan melompat ke 'catch' dengan sebuah pesan agar
 // pengguna tak garuk2 kepala 
 // Silahkan baca2 tentang exceptions di  
 // http://us2.php.net/manual/en/language.exceptions.php 
    try 
    { 
  // statement dalam wilayah 'try' ini membukan koneksi ke datbase menggunakan
  // PDO library 
  // PDO di design utk menyediakan flexible interface antara PHP dengan 
  // banyak jenis database servers. 
  // silahkan baca2 tentang PDO di 
  // http://us2.php.net/manual/en/class.pdo.php 
        $db = new PDO("mysql:host={$host};dbname={$dbname};charset=utf8", $username, $password, $pakai_utf8); 
    } 
    catch(PDOException $eksepsinya) 
    { 
  // jika ada kesalahan saat buka koneksi ke database maka 
  // akan terperangkap disini dan berhenti eksekusi dan
  // menunjukan pesan (apanya yg salah)
  // Kalau utk produksi mungkin tak perlu output $eksepsinya->getMessage(). 
  // agar tak mudah di mainkan oleh orang nakal. 
         
        die("Koneksi ke database Gagal: " . $eksepsinya->getMessage()); 
    } 
     
 // berikut adalah konfigurasi PDO mengeluarkan exception ketika
 // menemukan kesalahan dalam kode, agar bisa di pakai utk 
 // try/catch  
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
     
 // berikut adalah konfigurasi PDO utk melihat barisan data(rows) di
 // dalam database menggunakan 'associative array'
 // maksudnya array akan ada 'string indexes', dimana isi 
 // string me-representasikan nama kolom di database . 
    $db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); 
     
 // get_magic_quotes_gpc sudah wafat tapi jaga kemungkinan jikalau
 // ada manusia yg masih pakai PHP tua bangka (PHP 5.3 kebawah) maka
 // kode berikut adalah berguna untuk mengagaglkan magic quotes.  
 // baca tentang magic qoutes selengkapnya di: 
 // http://php.net/manual/en/security.magicquotes.php 
    if(function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc()) 
    { 
        function matikan_magic_quotes_nya(&$array) 
        { 
            foreach($array as &$value) 
            { 
                if(is_array($value)) 
                { 
                    matikan_magic_quotes_nya($value); 
                } 
                else 
                { 
                    $value = stripslashes($value); 
                } 
            } 
        } 
     
        matikan_magic_quotes_nya($_POST); 
        matikan_magic_quotes_nya($_GET); 
        matikan_magic_quotes_nya($_COOKIE); 
    } 
     
 // berikut utk informasikan web browser bahwa isinya adalah di
 // encoded dengan UTF-8 sehingga content yang di return adalah
 // dalam bentuk utf8 juga
    header('Content-Type: text/html; charset=utf-8'); 
     
 // 'sessions' di gunakan utk menyimpan informasi tentang
 // pengunjung dari halaman ke halaman
 // Berbeda dengan 'cookie', sessions menyimpan infromasi di server
 // Namun demikian, dalam banyak kasus 'sessions' masih menggunakan
 // cookies tapi pengunjung juga harus menghidupkan cookie_nya  
 // silahkan baca2 tentang cookie di: 
 // http://us.php.net/manual/en/book.session.php 
    session_start(); 

?>

Halaman untuk login dari sisi server sudah selesai, berikut adalah halaman login dari sisi klien yaitu dari aplikasi android dengan nama ClassUtkLogIn.java


package com.vik_sintus.projects.koneksiandroidmysql;

import java.util.ArrayList;
import java.util.List;

import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONException;
import org.json.JSONObject;


import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.AsyncTask;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class ClassUtkLogIn extends Activity implements OnClickListener {

 private EditText isiNamaUser, isiPassword;
 private Button tombolLogin, tombolRegistrasi;

 // utk progress bar_nya
 private ProgressDialog progressBarNya;

 // pasang class JSON parser
 ClassJSONParser classJsonParser = new ClassJSONParser();

 // lokasi script utk login: bernama login_nya.php

   // biasanya localhost :
   // tapi untuk testing, lebih baik pakai alamat IP
   // kalau tak tahu IP-nya di windows silahkan buka
   // command prompt lalu ketik ipconfig
   // lihat IPv4 Address
   // kalau di mac ketik ifconfig dan cari ip dengan en0 atau en1
   // private static final String LINK_UNTUK_LOGIN =
   // "http://xxx.xxx.x.x.xxx/folderNya/login_nya.php";

 // kalau cobe di emulator:
 private static final String LINK_UNTUK_LOGIN = "http://192.168.1.102/mysql_android/login_nya.php";

     // coba di server jauh(remote), server bayaran:
  // private static final String LINK_UNTUK_LOGIN =
  // http://www.namaWeb.com/folderNya/login_nya.php;

 // identitas elemen yg perlu di 
 // jawab oleh JSON dari php script:
 private static final String TAG_SUKSES = "berhasil";
 private static final String TAG_PESAN = "tampilkan_pesan";

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  
  super.onCreate(savedInstanceState);
  setContentView(R.layout.tampilan_login);

  // utk kotak input yg perlu di di isi pengguna
  isiNamaUser = (EditText) findViewById(R.id.username);
  isiPassword = (EditText) findViewById(R.id.password);

  // utk tombol
  tombolLogin = (Button) findViewById(R.id.login);
  tombolRegistrasi = (Button) findViewById(R.id.register);

  // agar tombol bisa di klik
  tombolLogin.setOnClickListener(this);
  tombolRegistrasi.setOnClickListener(this);

 }

 @Override
 public void onClick(View apaYgDiKlik) {
  
  switch (apaYgDiKlik.getId()) {
  case R.id.login:
   new MencobaLogin().execute();
   break;
  case R.id.register:
   Intent i = new Intent(this, ClassRegistrasi.class);
   startActivity(i);
   break;

  default:
   break;
  }
 }

 class MencobaLogin extends AsyncTask<String, String, String> {

  @Override
  protected void onPreExecute() {
   super.onPreExecute();
   progressBarNya = new ProgressDialog(ClassUtkLogIn.this);
   progressBarNya.setMessage("Mencoba login...");
   progressBarNya.setIndeterminate(false);
   progressBarNya.setCancelable(true);
   progressBarNya.show();
  }

  @Override
  protected String doInBackground(String... args) {
   
   // jika sukses
   int jikaSukses;
   String namaUser = isiNamaUser.getText().toString();
   String password = isiPassword.getText().toString();
   try {
    // menyusun parameternya (disini parameternya 
    // cuma 2 (username dan password))
    List<NameValuePair> namaDanPassword = new ArrayList<NameValuePair>();
    namaDanPassword.add(new BasicNameValuePair("username_nya", namaUser));
    namaDanPassword.add(new BasicNameValuePair("password_nya", password));

    Log.d("requestNya!", "dimulai");
    // utk melengkapi proses login, maka 
    // perlu membuatHttpRequst ke server
    JSONObject jsonObjectNya = classJsonParser.membuatHttpRequest(LINK_UNTUK_LOGIN, "POST",
      namaDanPassword);

    // priksa log jawaban dari JSON
    Log.d("Coba login", jsonObjectNya.toString());

    // apa kata JSON tentang TAG_SUKSES
    jikaSukses = jsonObjectNya.getInt(TAG_SUKSES);
    if (jikaSukses == 1) {
     Log.d("Login_nya Sukses!", jsonObjectNya.toString());
     // simpan data yg di masukan pengguna
     SharedPreferences sharedPrefNya = PreferenceManager
       .getDefaultSharedPreferences(ClassUtkLogIn.this);
     Editor editorNya = sharedPrefNya.edit();
     editorNya.putString("username_nya", namaUser);
     editorNya.commit();
     
     Intent intentNya = new Intent(ClassUtkLogIn.this, ClassBacaKomentar.class);
     finish();
     startActivity(intentNya);
     return jsonObjectNya.getString(TAG_PESAN);
    } else {
     Log.d("Login_nya Gagal!", jsonObjectNya.getString(TAG_PESAN));
     return jsonObjectNya.getString(TAG_PESAN);
    }
   } catch (JSONException e) {
    e.printStackTrace();
   }

   return null;

  }

  protected void onPostExecute(String urlFileNya) {
   // kalau sudah selesai di gunakan, matikanlah
   // progressbar_nya dengan metode dismiss();
   progressBarNya.dismiss();
   if (urlFileNya != null) {
    Toast.makeText(ClassUtkLogIn.this, urlFileNya, Toast.LENGTH_LONG).show();
   }

  }

 }

}


Dalam kode java di atas di minta tampang atau user interface(UI) dari halaman login di setContentView(R.layout.tampilan_login);
Berikut adalah isi dari tampilan_login.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
   >

    <Button
        android:id="@+id/register"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/login"
        android:layout_alignParentBottom="true"
        android:layout_alignRight="@+id/login"
        android:layout_marginBottom="25dp"
        android:text="Registrasi" />

    <Button
        android:id="@+id/login"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@+id/register"
        android:layout_alignLeft="@+id/password"
        android:layout_alignRight="@+id/password"
        android:text="Login" />

    <EditText
        android:id="@+id/password"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@+id/login"
        android:layout_centerHorizontal="true"
        android:ems="10"
        android:inputType="textPassword" >

        <requestFocus />
    </EditText>

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="17dp"
        android:gravity="center"
        android:text="Belajar Android PHP Mysql"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:textStyle="bold" />

    <ImageView
        android:contentDescription="Lodokn One Cicingn Pe'ang"
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/textView2"
        android:layout_centerHorizontal="true"
        android:src="@drawable/lodok" />

    <TextView
        android:id="@+id/TextView01"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@+id/password"
        android:layout_alignLeft="@+id/password"
        android:layout_marginLeft="22dp"
        android:text="PasswordNya" />

    <EditText
        android:inputType="text"
        android:id="@+id/username"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@+id/TextView01"
        android:layout_centerHorizontal="true"
        android:ems="10" />

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignRight="@+id/TextView01"
        android:layout_centerVertical="true"
        android:text="NamaUserNya" />

</RelativeLayout>


Berikut adalah tampilan halaman Login
Halaman Login
Ketika user berhasil login maka bawalah dia ke halaman komentar agar bisa baca komentar, jadi... tujuan pembuatan halaman Login ini bukan saja untuk Login tapi juga memiliki kemampuan untuk mengantar user ke halaman lain.  Didalam bahasa program java dan atau android hal itu di lakukan dengan class Intent. Perhatikan kode pada ClassUtkLogIn.java dan lihat
Intent intentNya = new Intent(ClassUtkLogIn.this, ClassBacaKomentar.class);
     finish();
     startActivity(intentNya);
  intentNya apa? Kode di antas menunjukan bahwa intentNya adalah untuk buka halaman Login dan juga buka halaman Baca Komentar ... Dengan demikian kini saatnya kita membuat class untuk baca komentar yang saya beri nama ClassBacaKomentar.java.
Tetapi... oleh karena halaman ini sudah terlalu panjang maka saya akan memulai ClassBacaKomentar pada post baru... silahkan baca di http://belajar-android-indonesia.blogspot.com.au/2013/10/android-php-dan-mysql-database-bagian-2.html

52 comments:

  1. saya mau bertanya, saya ingin membuat aplikasi yang bisa diakses di android maupun bisa tampil di interface yang berupa layar touchscreen. jadi ada server yang menampung code php dan database mySql. lalu klien-nya adalah HP android dan layar sentuh. jadi aplikasinya juga dapat diakses melalui layar sentuh yang tersambung secara lokal ke server-nya.
    Yang jd pertanyaan, server nya itu butuh sistem operasi apa sebagai server dari aplikasi android dan aplikasi yg tampil di layar sentuhnya ?
    terimakasih banyak

    ReplyDelete
  2. Hello Mega,
    semua server yang ada PHP dan MYSQL bisa di gunakan untuk keperluan tersebut.
    Kode di tutorial ini bahkan saya telah test hanya dengan menggunakan server XAMP yang di dalamnya ada phpmyadmin.... yang jelas, hampir semua server bisa

    ReplyDelete
    Replies
    1. itu kan udah di tes di server Xampp??? klo boleh coba dech tes di hosting!! ^_^

      sebelumnya saya sudah lama trial masalah ini,
      dan sampai sekarang saya masih belum dapet,

      menggunakan emulator (AVD) dengan server lokal (Xampp) semua berjalan sukses, tidak ada masalah, saya ingin implementasikan pda device mobile (smartphone), tp sebelumnya saya coba di emulator dengn mencoba pindahkan ke server hosting tidak berjalan sesuai dengan yg di server lokal... (settingan koneksi sudah di alihkan ke hosting)

      mohon pencerahannya!

      email: morugakiro@gmail.com

      Delete
    2. emulator memang susah utk konek ke internet... coba pindahkan aplikasinya ke device

      Delete
    3. konek internet bisa yg susah pake IP.
      saya coba web browser pake IP http://127.0.0.1 ga tampil apa2

      Delete
    4. pake alamat web nya yang sudah di hosting contoh di url di eclipse isi url = "http://nama web yg udh di hosting/folder/login.php" jadi ga perlu ip servernya yang di input
      sekian...

      Delete
    5. satu lagi smartphone kalian harus konek internet ya kalo pake avd laptopnya yang konek internet
      good luck...

      Delete
  3. class jsonparse nya kok gak ada ya? itu maksud membuahttp didalam klas jsonparse itu apa? soalnya class nya tidak di beritahu isi codingnya jadi sedikit membingungkan

    ReplyDelete
    Replies
    1. silahkan baca dengan lengkap kawan ... memang kodenya agak panjang dan berliku, hal itu karena memang tak ada coding yang pendek dan gampang tapi hampir semuanya panjang dan berliku

      Kalau memang ingin langsung loncat ke class JSON nya silahkan pergi ke, http://belajar-android-indonesia.blogspot.com.au/2013/10/membangun-class-jsonjavascript-object.html

      Delete
  4. mas, mau tanya nih, ini programnya kalo dijalankan di emulator jalan .... lancar.... tapi kalo langsung di jalankan di hape, langsung force closed... knp yah????

    ReplyDelete
    Replies
    1. apakah link untuk servernya sudah ok mas
      Coba lihat kode java di bagian berikut:
      private static final String LINK_UNTUK_LOGIN = "http://192.168.1.102/mysql_android/login_nya.php"

      mohon di ganti dengan alamat server yang dapat di hubungkan oleh HP-nya

      Delete
    2. aku liat di log catnya
      tulisannya gini :
      TAg : Json Parsernya
      Text : salah mengkonvert hasiljava.lang.NullPointerException

      garis bawahnya

      tag : Json Parsernya
      text : Salah proses datanya prg.json.JSONException : end of input at character 0 of

      kalimat bawahnya lagi

      Tag: AndroidRuntime
      text : FATAL EXCEPTION : Asynctask #1
      java.langRuntimeException : an error occurd while execcuting doInBackground ()


      itu mas, kalimat yang saya kutip dari log catnya...... :)

      Delete
  5. atau butuh spek hape andro yang tinggi mungkin mas, hhe...... sementara masih saya coba di smartfren

    ReplyDelete
  6. mas gimana script php nya kalau pass ingin pake md5

    ReplyDelete
  7. Pak bisa tidak menghubungkan phonegap ,javascript dan php? Jadi program yg mau saya buat itu inputannya dihasilkan dari javascript berupa rss feed nah rss itu mau diolah sama php? Kira2 bisa tidak yah pak. Trimakasih

    ReplyDelete
    Replies
    1. sorry Sap saya kurang mahir javascript

      Delete
  8. pak, kenapa ketika memasukkan user dan password di form login/regis datanya tidak bisa masuk k database (saya pakai navicat premium)? saya juga telah menambahkan file php simpan sbb:


    tapi hasilnya tetap tidak bisa tercatat di database.... saya sudah coba baik di localhost maupun di emulator... bahkan ketika coba di emulator setelah beberapa saat aplikasinya malah tertutup paksa? mohon solusinya...

    terima kasih

    ddtrinaldi@gmail.com

    ReplyDelete
    Replies
    1. Hello Dit
      servernya di komputer lokal atau di tempat lain (remote)

      Delete
  9. Pak, ketika saya jalankan aplikasi di hape dan klik tombol login, kenapa aplikasi langsung forced close ya pak? padahal error di coding sudah tidak ada. Saya menggunakan localhost, Xampp. Penulisan link "http://10.0.2.2/pemancingan/login.php". Apakah alamat yg saya gunakan salah atau karena hal lain pak?
    mohon pencerahannya,
    terima kasih...
    fajaranaksehat@gmail.com

    ReplyDelete
  10. coba dari HP browser dengan alamat http://10.0.2.2:80/pemancingan/login.php
    TETAPI setiap mau tes harus di cek ip address pada komputernya melalui command prompt dengan mengetik 'ipconfig' tanpa tanda kutip karena kadang ip address berubah menurut dinamika koneksi network sehingga ip address nya bisa saja berubah ke 10.0.2.1 atau 10.0.2.3 dst

    ReplyDelete
  11. This comment has been removed by the author.

    ReplyDelete
  12. Ketika saya buka dari browser HP tidak dapat terhubung ke alamat http://10.0.2.2:80/pemancingan/login.php atau alamat http://192.168.1.114/pemancingan/login.php(alamat sesuai ipconfig). Sedangkan ketika membuka alamat http://192.168.1.114/pemancingan/login.php dari browser dan login muncul {"berhasil":0,"tampilkan_pesan":"Terdapat kesalahan dalam Database !"}. Saya masih kebingungan pak, mohon solusi/penjelasannya...
    terimakasih banyak....

    ReplyDelete
  13. ok itu berarti komunikasi antara HP dan komputer telah bekerja dengan baik TETAPI aplikasinya perlu juga di pasang di HP agar ada 'client side script'
    Sekarang server nya masih ngomong sendiri karena yang di lihat oleh HP adalah hasil kerja 'server side script' dan jikalau applikasi nya di install ke HP maka HP akan ada kode java(client side script) utk bisa berkomunikasi dengan server sehingga bisa memperlihatkan apa yang mau di lihat di di sisi klient(HP)
    NOTE selalu cek ip address nya setiap kali mau test apalagi di tempat ramai seperti yang di tunjukan ip address tsb di atas dan kalau ip address http://192.168.1.114/ gagal maka tambahkan port 80 menjadi http://192.168.1.114:80

    ReplyDelete
  14. Di HP sudah ada aplikasinya pak, setelah coding saya run ke HP dan setelah itu terdapat project yg saya buat di HP. Apakah hal tsb yg bapak maksud memasang aplikasi atau aplikasi saya blm terpasang ?

    ReplyDelete
  15. betul Jar, itu yg saya maksudkan
    nampaknya HP nya belum tahu kalau aplikasi nya sudah terpasang,
    coba buka HP dan pergi ke folder aplikasi bersangkutan dan di install lagi

    apakah memang sudah coba di emulator sebelum di install ke HP?

    ReplyDelete
  16. saya coba di emulator gagal pak, aplikasi nya tidak mau terpasang ke emulator... apa setingan emulator saya jg salah ?

    ReplyDelete
  17. kalau gagal di emulator maka akan gagal pula di HP
    setingan emulatornya harus minimal Honeycomb atau SDK versi 11 ke atas
    dan kalau develop pakai eclipse maka akan ada pesan dan penjelasan kira2 apanya yang salah pada console

    ReplyDelete
  18. Ketika saya run di emulator proses login gagal pak, keluar pesan "masukkan username dan password !", baik itu username dan password sudah saya inputkan ataupun dalam keadaan kosong. sepertinya file login.php saya masih salah...

    ReplyDelete
  19. jangan lupa server nya nya di hidupin baik apache nya, maupun MYSQL nya dan juga priksa apa pesan error pada logCat

    ReplyDelete
  20. pak saya sudah punya ip public, dan smartphone saya sudah bisa akses ip tersebut. berarti saya gak perlu xampp kan pak? tinggal langsung arahkan ke server yg saya punya kan?

    ReplyDelete
  21. kalau sudah ada server lain, gak perlu xampp Vi
    buatkan satu folder khusus utk proyek android di server tsb seperti pada contoh, saya buatkan folder bernama mysql_android atau dengan nama apa saja sesuai logika sendiri.
    Biasanya kalau di server public folder tersebut di taruh di dalam folder bernama www atau httpdocs atau public_html

    ReplyDelete
  22. oke mas makasi, aku coba dulu deh.hehe

    ReplyDelete
  23. mas saya mau tanya, kalau notif error dari Logcat FATAL EXCEPTION: AsyncTask #3. itu kenapa iya ?? sama error dari JSON nya, "Salah Proses datanya org.json.JSONException: Value failed of type java.lang.String cannot be converted to JSONObject"

    ReplyDelete
    Replies
    1. semua file belum lengkap di pasang Jar
      coba priksa semua file nya

      Delete
  24. pa saya ada seperti ini di logcat error parsing data org.json.jsonexception value br of type java.lang cannot be converted cara selesaikannya gimana ya pa?

    ReplyDelete
  25. hei Vin.. saya kurang tahu dimana letak kesalahan nya karena dalam kode tsb di atas saya telah pasang perangkap(exception) di beberapa tempat dalam bahasa indonesia, sehingga bunyi error tsb adalah dari luar scope maka alur kodenya masih ok.
    bunyi kesalahan seperti itu biasanya di sebabkan oleh metode yang telah di deprecated(dipensiunkan) oleh pemilik bahasa programan

    coba pasang error_reporting(E_ALL ^ E_DEPRECATED); di PHP file atau.
    coba hilangkan tanda / pada semua PHP file yang berbunyi require("/konfigurasi_nya.php");

    ReplyDelete
  26. mas, sekarang saya dapat masalahnya emulator hanya loading terus, dan akhirnya di logcat muncul:
    04-22 12:36:48.939: D/requestNya!(713): dimulai
    04-22 12:39:59.571: W/System.err(713): java.net.SocketException: The operation timed out
    04-22 12:39:59.630: W/System.err(713): at org.apache.harmony.luni.platform.OSNetworkSystem.connectStreamWithTimeoutSocketImpl(Native Method)

    saya sangat butuh pencerahan terimakasih mas...
    padahal saya sudah ikutin semuanya, percis banget

    ReplyDelete
    Replies
    1. sepertinya servernya tidak mau menjawab
      apakah servernya sudah di hidupkan?

      Delete
    2. sepertinya servernya tidak mau menjawab
      apakah servernya sudah di hidupkan?

      Delete
  27. This comment has been removed by the author.

    ReplyDelete
  28. gan di kasih dong nama clas ane bingugn

    ReplyDelete
  29. pa saya jalanin jsonnya hasilnya ini pak kenapa ya? {"success":0,"message":"Required field(s) is missing"}

    ReplyDelete
  30. saya dapat ini mas,04-26 02:41:21.370: D/Coba login(2427): {"message":"Login successfully.","success":1}

    lalu ini 04-26 02:41:21.380: W/System.err(2427): org.json.JSONException: No value for berhasil

    jadi saya ga berpindah form. . kenapa ya mas

    ReplyDelete
  31. om?? vidio tutornya udah dibikin??
    aku masih bingung, mungkin kalau ada vidionya uda ga bingung

    ReplyDelete
  32. om??
    mau nanya nih....
    saat klick register di dari sisi server kok muncul pesan "object not found!" dan "error 404"
    itu kenapa ya??

    ReplyDelete
  33. gan kalo error ya kayak gini kenapa ya?

    Salah proses datanya org.json.JSONException: Value Koneksi of type java.lang String cannot be converted to JSONObject

    ReplyDelete
  34. gan gimana caranya nambahin asynctask di file java, udah dicoba berulang kali, tapi unfortunately app has stop.. mohon pencerahannya gan

    public class SistemAkademikActivity extends Activity {
    String var_usr,var_pass;
    EditText usr, psw;
    JSONArray str_login = null;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
    setContentView(R.layout.panel_login);

    usr = (EditText) findViewById(R.id.txt_username);
    psw = (EditText) findViewById(R.id.txt_pass);

    Button reset = (Button) findViewById(R.id.btn_hapus);
    reset.setOnClickListener(new OnClickListener() {
    public void onClick(View v) {
    usr.setText("");
    psw.setText("");
    }
    });

    Button submit = (Button) findViewById(R.id.btn_login);
    submit.setOnClickListener(new OnClickListener() {
    public void onClick(View v) {

    var_usr = usr.getText().toString();
    var_pass = psw.getText().toString();
    String stts = "";
    String kode = "";
    String link_url = "http://10.0.2.2/siakad-andro/login.php?usr="+var_usr+"&psw="+var_pass;
    JSONParser jParser = new JSONParser();
    JSONObject json = jParser.AmbilJson(link_url);

    try {
    str_login = json.getJSONArray("statuslogin");

    for(int i = 0; i < str_login.length(); i++){
    JSONObject ar = str_login.getJSONObject(i);
    TextView st = (TextView) findViewById(R.id.txt_alert);
    String alrt = ar.getString("hasil");
    stts = ar.getString("st");
    kode = ar.getString("id");
    st.setText(alrt);
    usr.setText("");
    psw.setText("");

    if(stts.trim().equals("ok"))
    {
    Intent ni = null;
    ni = new Intent(SistemAkademikActivity.this, DashBoardActivity.class);
    Bundle b = new Bundle();
    b.putString("par_kode", kode);
    ni.putExtras(b);
    startActivity(ni);
    }
    }
    } catch (JSONException e) {
    e.printStackTrace();
    }
    }
    });
    }

    ReplyDelete
  35. permisi master numpang tanya.
    apakah bisa kita membuat framework kemudian input database melalui android.
    terimakasih

    ReplyDelete
  36. saya mau nanya kalo ngambil data gambar dari MySQL trus di tampilin ke ImageView bagaimana caranya

    ReplyDelete
  37. pak saya sudah menyamakan ip seperti mysql saya yaitu 127.0.0.1 tapi tetap saja ketika saya login aplikasi fore close.. mohon bantuan

    ReplyDelete
  38. pak saya sudah menyamakan ip seperti mysql saya yaitu 127.0.0.1 tapi tetap saja ketika saya login aplikasi fore close.. mohon bantuan

    ReplyDelete