Home > Android, Java, Mobile, PHP > Membuat Aplikasi Client Server menggunakan Android, PHP dan MySQL

Membuat Aplikasi Client Server menggunakan Android, PHP dan MySQL


Posting kali ini, kita mencoba membuat aplikasi client server berbasis Android dan menghubungkan dengan database MySQL. Client-server ? Ya…. Kita akan membuat aplikasi Android yang datanya akan disimpan pada sebuah server. Bisa local (localhost) atau di internet.

Mengapa kita harus menympan data di database,  bukankah di Android memiliki database untuk menyimpan data ?. Sebenarnya Android memiliki fasilitas untuk menyimpan data yaitu:

  1. Shared preferences. Terdiri dari key dan value data. Model ini biasanya untuk menyimpan settingan (pengaturan) sebuah aplikasi.
  2. File. Fasilitas ini juga dapat menyimpan data sama halnya dengan Shared Preferences, hanya saja data disimpan ke dalam bentuk file. Misalnya: txt, xml atau bentuk file lainnya
  3. SQLite Database. Fasilitas ini cukup idel untuk menyimpan data yang lumayan banyak. Berbeda halnya dengan no 1 dan 2 di atas yang biasanya untuk menyimpan data yang sedikit seperti pengaturan. Dengan SQLite, kita dapat melakukan query dan table-table  seperti halnya database pada umumnya.

Untuk mempelajari ketiga fasilitas di atas, silakan klik  http://developer.android.com/training/basics/data-storage/index.html.

Ketiga fasilitas di atas menyimpan data pada ponsel pengguna (client). Nah, bagaimana jika ingin data itu selalu update dan dapat mengaksesnya siapa saja dan dimana saja (anyone, anytime and anywhere)?. Itulah alasanya mengapa kita memerlukan sebuah server dalam hal ini MySQL.

Aplikasi yang akan kita bangun tergambar seperti berikut:

Android, PHP, MySQL

Android, PHP, MySQL

Berdasarkan gambar di atas, ponsel Android akan melakukan request (get/post) ke server melalui internet. Cara ini juga sama jika ingin aplikasi berada pada localhost. Selanjutnya web server (dalam hal ini PHP), akan memproses request dari Android dan akan melakukan query ke database (MySQL). Jadi, akan ada tiga hal yang harus kita lakukan:

  1. Membuat Database
  2. Membuat script PHP
  3. Membuat aplikasi Android

OK….. langsung saja

1. Membuat database MySQL

Database: latihan_android

Table: mahasiswa (id, nim, nama, telp, alamat)


create database latihan_android;
use latihan_android;

CREATE TABLE IF NOT EXISTS `mahasiswa` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `nim` varchar(11) NOT NULL,
 `nama` varchar(100) NOT NULL,
 `telp` varchar(50) NOT NULL,
 `alamat` varchar(255) NOT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=29 ;

--
-- Dumping data for table `mahasiswa`
--

INSERT INTO `mahasiswa` ( `nim`, `nama`, `telp`, `alamat`) VALUES
( '2222', 'aaaa', '0801', 'Alamat 1'),
( '1111', 'bbbb', '0802', 'Alamat 2'),
( '2222', 'cccc', '0803', 'Alamat 3'),
( '3333', 'dddd', '0804', 'Alamat 4'),
( '1111', 'eeee', '0805', 'Alamat 5'),
( '2222', 'ffff', '0806', 'Alamat 6'),
( '3333', 'gggg', '0807', 'Alamat 7'),
( '4444', 'hhhh', '0808', 'Alamat 8'),
( '5555', 'iiii', '0809', 'Alamat 9');

2. Membuat script PHP

Database sudah selesai, selanjutnya adalah membuat script server side. Koq kita butuh script server side, Kita kan belajar Android (Java) ? … Sebenarnya Android tidak dapat berkomunikasi langsung dengan MySQL untuk memanipulasi database. Untuk itu, kita membutuhkan script server side misalnya ASP, JSP atau PHP untuk bisa menjadi “jembatan” antara Android dengan MySQL. Jadi, Android hanya memberika perintah (request) ke PHP dan PHP lah yang akan melaksanakan query ke MySQL.

Pada posting ini, kita membuat 5 (lima) file PHP.

1. index.php : sebagai file index dan hanya berisi HTML

2. connection.php: sebagai file koneksi ke database

3. select_all.php: untuk melakukan query select all, mengabil seluruh data dari table Mahasiswa

4. submit_mahasiswa.php : untuk memproses simpan dan update

5. delete_mahasiswa.php: untuk menghapus (delete) data mahasiswa

Semua file di atas diletakkan dalam direktori “android”. c:/xampp/htdocs/android. (sesuaikan dengan direktori server Anda).

index.php


<html>
<head>
 <title>Index Android</title>
</head>
<body>
 <h3>Index Android</h3>
</body>
</html>

connection.php


<?php

/*silakan sesuaikan dengan konfigurasi server Anda*/
$conn = mysql_connect('localhost', 'root', 'xxxxx') or die(mysql_error());
$db = mysql_select_db('latihan_android') or die(mysql_error());
?>

select_all.php


<?php

/*reply data dalam JSON */

include('connection.php');
$query = 'select * from mahasiswa';
$result = mysql_query($query) or die(mysql_error());

$data = array();
while($row = mysql_fetch_object($result)){
   $data['mahasiswa'][]= $row;
}
echo json_encode($data);
?>

submit_mahasiswa.php


<?php

/**jika id = 0,maka akan dilakukan insert, jika tidak update berdasarkan id */
include('connection.php');

$id = (int)$_POST['id'];
$nim = $_POST['nim'];
$nama = $_POST['nama'];
$telp = $_POST['telp'];
$alamat = $_POST['alamat'];

$query = 'insert into mahasiswa (nim, nama, telp, alamat) values ("'.$nim.'", "'.$nama.'", "'.$telp.'", "'.$alamat.'")';
if($id > 0){
   $query = 'update mahasiswa set nama = "'.$nama.'", nim = "'.$nim.'", telp = "'.$telp.'", alamat = "'.$alamat.'" where id = '.$id;
}
mysql_query($query) or die(mysql_error());

?>

delete_mahasiswa.php


<?php

/**menghapus mahasiswa berdasarkan id*/
include('connection.php');
$id = (int)$_GET['id'];
$query = 'delete from mahasiswa where id = '.$id;
$result = mysql_query($query) or die(mysql_error());
if(mysql_affected_rows() > 0){
    echo 'deleted id = '.$id;
}else{
    echo 'NOT founnd id = '.$id;
}
?>

Script PHP sudah selesai dan selanjutnya membuat aplikasi inti yaitu Android. Ada baiknya, sebelum membuat aplikasi android, kita test dulu apakah script PHP sudah bisa diakses dari emulator.

Caranya mudah, cukup buka browser dari emulator (AVD), dan bukalah url http://10.0.2.2/android/index.php

10.0.2.2 adalah host default untuk mengakses server local.

INdex

Index

Jika direktori dan file nya benar, server aktif dan MySQL aktif, maka tampilannya seperti gambar di atas, berari emulator sudah dapat mengakses localhost dan kita siap untuk membuat aplikasi Android.

3. Membuat aplikasi Android

Buatlah project Android seperti gambar berikut:

create

create

Pada project ini, kita membuat aplikasi dengan Min Requirement SDK adalah API 11 (Honeycomb) . Karena di aplikasi ini memiliki Action Bar (Action Bar hanya tersedia pada API 11 ke atas).

Secara default, Eclipse akan membuat 1 Activity dan 1 layout (MainActivity.java dan activity_main.xml).

a. Membuat object Mahasiswa

Yang pertama kita lakukan adalah membuat object Mahasiswa. Yha…. Mahasiswa, karena table yang dibuat sebelumnya adalah mahasiswa. Class Mahasiswa sangat membantu kita memanipulasi object. Salah satunya adalah konsep Object Relational Mapping (ORM) yang menggunakan object yang sama untuk memetakan table pada database.

Mahasiswa.java


package org.pizaini.mahasiswaonline.entities;

public class Mahasiswa {
 private Integer id;
 private String nim;
 private String nama;
 private String telp;
 private String alamat;

 public Mahasiswa() {
 super();
 }

public Mahasiswa(Integer id, String nim, String nama, String telp,
 String alamat) {
 super();
 this.id = id;
 this.nim = nim;
 this.nama = nama;
 this.telp = telp;
 this.alamat = alamat;
 }

public Integer getId() {
 return id;
 }

public void setId(Integer id) {
 this.id = id;
 }

public String getNim() {
 return nim;
 }

public void setNim(String nim) {
 this.nim = nim;
 }

public String getNama() {
 return nama;
 }

public void setNama(String nama) {
 this.nama = nama;
 }

public String getTelp() {
 return telp;
 }

public void setTelp(String telp) {
 this.telp = telp;
 }

public String getAlamat() {
 return alamat;
 }

public void setAlamat(String alamat) {
 this.alamat = alamat;
 }

}

b. Membuat class ServerRequest

Class ini akan kita gunakan berkomunikasi / melakukan request ke server. Pada class ini, kita membuat dua buah request, yaitu GET dan POST.

ServerRequest.java


package org.pizaini.mahasiswaonline.server;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.NameValuePair;
import org.apache.http.StatusLine;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;
import org.pizaini.mahasiswaonline.entities.Mahasiswa;
import android.util.Log;

public class ServerRequest {
 private final static String TAG = "ServerRequest";
 private final String serverUri = "http://10.0.2.2/android";
 public static final String urlSelectAll = "select_all.php";
 public static final String urlDelete = "delete_mahasiswa.php";
 public static final String urlSubmit = "submit_mahasiswa.php";

 public ServerRequest() {
super();
 }

/** Mengirimkan GET request */
public String sendGetRequest(String reqUrl){
 HttpClient httpClient;
 HttpGet httpGet = new HttpGet(serverUri+"/"+reqUrl);
 InputStream is = null;
 StringBuilder stringBuilder = new StringBuilder();
 try {
     HttpParams params = new BasicHttpParams();
     HttpConnectionParams.setConnectionTimeout(params, 3000);
     HttpConnectionParams.setSoTimeout(params, 3000);
     httpClient = new DefaultHttpClient(params);
     Log.d(TAG, "executing...");
     HttpResponse httpResponse = httpClient.execute(httpGet);
     StatusLine status = httpResponse.getStatusLine();
     if(status.getStatusCode() == HttpStatus.SC_OK && httpResponse != null){
        /** mengambil response string dari server */
        HttpEntity httpEntity = httpResponse.getEntity();
        is = httpEntity.getContent();
        BufferedReader reader = new BufferedReader(new InputStreamReader(is));
        String line = null;
        while((line = reader.readLine()) != null){
           stringBuilder.append(line+"\n");
        }
       is.close();
    }
 } catch (Exception e) {
    Log.d(TAG, e.getMessage());
 }

 return stringBuilder.toString();
 }

/** Mengirimkan POST request */
 public int sendPostRequest(Mahasiswa mahasiswa, String url){
     int replyCode = 99;
     HttpClient httpClient;
     HttpPost post = new HttpPost(this.serverUri+"/"+url);
     /** menambahkan parameter ke dalam request */
     List<NameValuePair> value = new ArrayList<NameValuePair>();
     value.add(new BasicNameValuePair("id", mahasiswa.getId().toString()));
     value.add(new BasicNameValuePair("nim", mahasiswa.getNim()));
     value.add(new BasicNameValuePair("nama", mahasiswa.getNama()));
     value.add(new BasicNameValuePair("telp", mahasiswa.getTelp()));
     value.add(new BasicNameValuePair("alamat", mahasiswa.getAlamat()));

     try {
        HttpParams params = new BasicHttpParams();
        HttpConnectionParams.setConnectionTimeout(params, 3000);
        HttpConnectionParams.setSoTimeout(params, 3000);
        httpClient = new DefaultHttpClient(params);
        post.setEntity(new UrlEncodedFormEntity(value));
        Log.d(TAG, "executing post...");
        HttpResponse httpResponse = httpClient.execute(post);
        StatusLine status = httpResponse.getStatusLine();
        if(status.getStatusCode() == HttpStatus.SC_OK){
           Log.d(TAG, "submitted sucessfully...");
           replyCode = status.getStatusCode();
        }
     } catch (IOException e) {
        Log.d(TAG, e.getMessage());
     }
 return replyCode;
 }
}

MainActivity akan kita gunakan untuk menampilkan ListView nama mahasiswa dan NIM. Seperti berikut:

ListView

ListView

c. Ubah layout activity_main.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"
 tools:context=".MainActivity" >

<ListView
 android:id="@+id/listview_main"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:dividerHeight="1dp"
 android:layout_margin="5dp" >
 </ListView>

</RelativeLayout>

d. Tambahkan layout baru list_row.xml

Layout ini adalah custom ListView agar dapat menampilhan Nama dan NIM mahasiswa dalam ListView.


<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:layout_margin="5dp"
 >

<TextView
 android:id="@+id/text_nama"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:layout_alignParentLeft="true"
 android:layout_alignParentTop="true"
 android:text="@string/app_name"
 android:typeface="sans"
 android:textColor="@android:color/background_dark"
 android:textAppearance="?android:attr/textAppearanceLarge" />

<TextView
 android:id="@+id/text_nim"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:layout_alignParentLeft="true"
 android:text="@string/app_name"
 android:textColor="@android:color/background_dark"
 android:layout_below="@+id/text_nama"/>

</RelativeLayout>

e. Membuat List Adapter

Untuk menampilkan custom ListView, kita membutuhkan sebuah adapter yang inherit kepada BaseAdapter. ListAdapterMahasiswa juga meng-implements Filterable yang berguna saat melakukan pencarian. LisBerikut adalah potongan source code nya:

ListAdapterMahasiswa.java

package org.pizaini.mahasiswaonline.entities;

import java.util.ArrayList;
import java.util.List;
import org.pizaini.mahasiswaonline.R;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Filter;
import android.widget.Filterable;
import android.widget.TextView;

public class ListAdapterMahasiswa extends BaseAdapter implements Filterable{
private Context context;
private List<Mahasiswa> list, filterd;

public ListAdapterMahasiswa(Context context, List<Mahasiswa> list) {
this.context = context;
this.list = list;
this.filterd = this.list;
}

@Override
public int getCount() {
return filterd.size();
}

@Override
public Object getItem(int position) {
return filterd.get(position);
}

@Override
public long getItemId(int position) {
return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
if(convertView == null){
LayoutInflater inflater = LayoutInflater.from(this.context);
convertView = inflater.inflate(R.layout.list_row, null);
}
Mahasiswa mhs = filterd.get(position);
TextView textNama = (TextView) convertView.findViewById(R.id.text_nama);
textNama.setText(mhs.getNama());

TextView textNim = (TextView) convertView.findViewById(R.id.text_nim);
textNim.setText(mhs.getNim());

return convertView;
}

@Override
public Filter getFilter() {
MahasiswaFilter filter = new MahasiswaFilter();
return filter;
}

/** Class filter untuk melakukan filter (pencarian) */
private class MahasiswaFilter extends Filter{

@Override
protected FilterResults performFiltering(CharSequence constraint) {
List<Mahasiswa> filteredData = new ArrayList<Mahasiswa>();
FilterResults result = new FilterResults();
String filterString = constraint.toString().toLowerCase();
for(Mahasiswa mhs: list){
if(mhs.getNama().toLowerCase().contains(filterString) || mhs.getNim().toLowerCase().contains(filterString)){
filteredData.add(mhs);
}
}
result.count = filteredData.size();
result.values = filteredData;
return result;
}

@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
filterd = (List<Mahasiswa>) results.values;
notifyDataSetChanged();
}

}

}

f. Edit MainActivity.java

MainActivity adalah class utama memiliki fitur:

– Menampilkan custom ListView

– Memiliki Option Menu yang ditampilkan pada Action Bar (Search dan New)

– Search View untuk melakukan filter (pencarian)

– ListView yang dapat diklik (clickable ListView)

– ListView yang dapat di long-click. Long clik akan menampilkan Contextual Action Bar (CAB) untuk Edit dan Delete.

Pada saat MainActivity dijalankan, Activity akan melakukan request ke server melalui AsyncTask.


...

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

/** melakukan load data melalui AsyncTask */
new MainActivityAsync().execute("load");
 }

...

Activity akan memanggil class ServerRequest untuk mengirimkan GET requets.


...

private class MainActivityAsync extends AsyncTask<String, Void, String>{
...

@Override
protected String doInBackground(String... params) {
...
/** Mengirimkan request ke server dan memproses JSON response */
String response = serverRequest.sendGetRequest(ServerRequest.urlSelectAll);
list = processResponse(response);
...
}

...
 }

...

Response dari request ini adalah JSON (JavaScript Object Notation). Url yang direquest http://10.0.2.2/android/select_all.php. Atau dapat dilihat melalui browser localhost http://localhost/android/select_all.php.

JSON Response:

{"mahasiswa":[
{"id":"29","nim":"2222","nama":"aaaa","telp":"0801","alamat":"Alamat 1"},
{"id":"30","nim":"1111","nama":"bbbb","telp":"0802","alamat":"Alamat 2"},
{"id":"31","nim":"2222","nama":"cccc","telp":"0803","alamat":"Alamat 3"},
{"id":"32","nim":"3333","nama":"dddd","telp":"0804","alamat":"Alamat 4"},
{"id":"33","nim":"1111","nama":"eeee","telp":"0805","alamat":"Alamat 5"},
{"id":"34","nim":"2222","nama":"ffff","telp":"0806","alamat":"Alamat 6"},
{"id":"35","nim":"3333","nama":"gggg","telp":"0807","alamat":"Alamat 7"},
{"id":"36","nim":"4444","nama":"hhhh","telp":"0808","alamat":"Alamat 8"},
{"id":"37","nim":"5555","nama":"iiii","telp":"0809","alamat":"Alamat 9"}
]}

Response JSON ini akan diproses sesuai dengan object nya. Berdasarkan response JSON di atas, terlihat bahwa object JSON terdiri dari “mahasiswa”. Dan “mahasiswa” memiliki JSON Array.


...

private List<Mahasiswa> processResponse(String response){
List<Mahasiswa> list = new ArrayList<Mahasiswa>();
try {
JSONObject jsonObj = new JSONObject(response);
JSONArray jsonArray = jsonObj.getJSONArray("mahasiswa");
Log.d(TAG, "data lengt: "+jsonArray.length());
Mahasiswa mhs = null;
for(int i = 0; i < jsonArray.length(); i++){
JSONObject obj = jsonArray.getJSONObject(i);
mhs = new Mahasiswa();
mhs.setId(obj.getInt("id"));
mhs.setNim(obj.getString("nim"));
mhs.setNama(obj.getString("nama"));
mhs.setTelp(obj.getString("telp"));
mhs.setAlamat(obj.getString("alamat"));
list.add(mhs);
}
} catch (JSONException e) {
Log.d(TAG, e.getMessage());
}
return list;
 }

...

Berikut adalah Source code lengkap MainActivity.java


package org.pizaini.mahasiswaonline;

import java.util.ArrayList;
import java.util.List;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.pizaini.mahasiswaonline.entities.ListAdapterMahasiswa;
import org.pizaini.mahasiswaonline.entities.Mahasiswa;
import org.pizaini.mahasiswaonline.server.ServerRequest;
import android.os.AsyncTask;
import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.app.SearchManager;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.util.Log;
import android.view.ActionMode;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView.OnItemLongClickListener;
import android.widget.ListView;
import android.widget.SearchView;
import android.widget.Toast;
import android.widget.SearchView.OnQueryTextListener;

public class MainActivity extends Activity implements OnQueryTextListener{
 private static final String TAG = "MainActivity";
 private ListView listView;
 private ActionMode actionMode;
 private ActionMode.Callback amCallback;
 private ProgressDialog progressDialog;
 private ServerRequest serverRequest;
 private List<Mahasiswa> list;
 private ListAdapterMahasiswa adapter;
 private Mahasiswa selectedList;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);
 serverRequest = new ServerRequest();
 listView = (ListView) findViewById(R.id.listview_main);
 amCallback = new ActionMode.Callback() {

 @Override
 public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
 return false;
 }

 @Override
 public void onDestroyActionMode(ActionMode mode) {
 actionMode = null;
 }

 @Override
 public boolean onCreateActionMode(ActionMode mode, Menu menu) {
 getMenuInflater().inflate(R.menu.activity_main_action, menu);
 return true;
 }

 @Override
 public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
 switch(item.getItemId()){
 case R.id.action_menu_edit:
 showUpdateForm();
 break;
 case R.id.action_menu_delete:
 delete();
 break;
 }
 mode.finish();
 return false;
 }
 };
 list = new ArrayList<Mahasiswa>();
 /** melakukan load data melalui AsyncTask */
 new MainActivityAsync().execute("load");
 }

private void showUpdateForm(){
 Intent in = new Intent(getApplicationContext(), FormMahasiswa.class);
 in.putExtra("id", selectedList.getId().toString());
 in.putExtra("nim", selectedList.getNim());
 in.putExtra("nama", selectedList.getNama());
 in.putExtra("telp", selectedList.getTelp());
 in.putExtra("alamat", selectedList.getAlamat());
 startActivity(in);
 }

 private void delete(){
 AlertDialog.Builder builder = new AlertDialog.Builder(this);
 builder.setMessage("Delete "+selectedList.getNama()+" ?");
 builder.setTitle("Delete");
 builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
 public void onClick(DialogInterface dialog, int which) {
 new MainActivityAsync().execute("delete");
 list.remove(list.indexOf(selectedList));
 Toast.makeText(getApplicationContext(), "deleted", Toast.LENGTH_SHORT).show();
 }
 });
 builder.setNegativeButton("No", new DialogInterface.OnClickListener() {
 public void onClick(DialogInterface dialog, int which) {
 dialog.cancel();
 }
 });
 AlertDialog alert = builder.create();
 alert.setIcon(android.R.drawable.ic_menu_delete);
 alert.show();
 }
 @Override
 public boolean onCreateOptionsMenu(Menu menu) {
 getMenuInflater().inflate(R.menu.activity_main, menu);
 SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
 SearchView searchView = (SearchView) menu.findItem(R.id.option_menu_search).getActionView();
 searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
 searchView.setIconifiedByDefault(false);
 searchView.setOnQueryTextListener(this);
 searchView.setQueryHint("nama atau nim");

 return true;
 }

 @Override
 public boolean onOptionsItemSelected(MenuItem item) {
 switch(item.getItemId()){
 case R.id.option_menu_new:
 Intent in = new Intent(getApplicationContext(), FormMahasiswa.class);
 startActivity(in);
 break;
 }
 return super.onOptionsItemSelected(item);
 }

 private List<Mahasiswa> processResponse(String response){
 List<Mahasiswa> list = new ArrayList<Mahasiswa>();
 try {
 JSONObject jsonObj = new JSONObject(response);
 JSONArray jsonArray = jsonObj.getJSONArray("mahasiswa");
 Log.d(TAG, "data lengt: "+jsonArray.length());
 Mahasiswa mhs = null;
 for(int i = 0; i < jsonArray.length(); i++){
 JSONObject obj = jsonArray.getJSONObject(i);
 mhs = new Mahasiswa();
 mhs.setId(obj.getInt("id"));
 mhs.setNim(obj.getString("nim"));
 mhs.setNama(obj.getString("nama"));
 mhs.setTelp(obj.getString("telp"));
 mhs.setAlamat(obj.getString("alamat"));
 list.add(mhs);
 }
 } catch (JSONException e) {
 Log.d(TAG, e.getMessage());
 }
 return list;
 }

 private void populateListView(){
 adapter = new ListAdapterMahasiswa(getApplicationContext(), list);
 listView.setAdapter(adapter);
 listView.setOnItemLongClickListener(new OnItemLongClickListener() {

@Override
 public boolean onItemLongClick(AdapterView<?> adapterView, View v, int pos, long id) {
 if(actionMode != null){
 return false;
 }
 actionMode = startActionMode(amCallback);
 v.setSelected(true);
 selectedList = (Mahasiswa) adapter.getItem(pos);
 return true;
 }

 });

 listView.setOnItemClickListener(new OnItemClickListener() {

@Override
 public void onItemClick(AdapterView<?> adapterView, View v, int pos,
 long id) {
 selectedList = (Mahasiswa) adapter.getItem(pos);
 Intent in = new Intent(getApplicationContext(), DetailMahasiswa.class);
 in.putExtra("id", selectedList.getId().toString());
 in.putExtra("nim", selectedList.getNim());
 in.putExtra("nama", selectedList.getNama());
 in.putExtra("telp", selectedList.getTelp());
 in.putExtra("alamat", selectedList.getAlamat());
 startActivity(in);
 }
 });
 }

 private class MainActivityAsync extends AsyncTask<String, Void, String>{

 @Override
 protected void onPreExecute() {
 progressDialog = new ProgressDialog(MainActivity.this);
 progressDialog.setMessage("retrieving...");
 progressDialog.setIndeterminate(false);
 progressDialog.setCancelable(false);
 progressDialog.show();
 }

 @Override
 protected String doInBackground(String... params) {
 if(params[0] == "delete"){
 serverRequest.sendGetRequest(ServerRequest.urlDelete+"?id="+selectedList.getId().toString());
 }else{
 /** Mengirimkan request ke server dan memproses JSON response */
 String response = serverRequest.sendGetRequest(ServerRequest.urlSelectAll);
 list = processResponse(response);
 }
 return null;
 }

 @Override
 protected void onPostExecute(String result) {
 progressDialog.dismiss();
 runOnUiThread(new Runnable() {
 @Override
 public void run() {
 populateListView();
 }
 });
 }

 }

@Override
 public boolean onQueryTextChange(String newText) {
 adapter.getFilter().filter(newText);
 return true;
 }

@Override
 public boolean onQueryTextSubmit(String query) {
 return false;
 }

}

g. Membuat Form Mahasiswa

Buatlah sebuah activity (FormMahasiswa.java) dengan layout activity_form_mahasiswa.xml. Layout ini terdiri dari TextView dan EditText untuk input data Mahasiswa (nama, nim, telp dan alamat). Form Mahasiswa kita gunakan untuk insert dan delete.

activity_form_mahasiswa.xml


<LinearLayout 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"
 android:orientation="vertical"
 android:layout_margin="5dp"
 tools:context=".FormMahasiswa" >

<TextView
 android:id="@+id/textView1"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:text="@string/tv_nim" />

<EditText
 android:id="@+id/add_new_nim"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:hint="@string/hint_nim"
 android:inputType="number"
 android:layout_marginBottom="30dp"
 android:ems="10" >
 <requestFocus />
 </EditText>

<TextView
 android:id="@+id/textView2"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:text="@string/tv_nama" />

<EditText
 android:id="@+id/add_new_nama"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:hint="@string/hint_nama"
 android:layout_marginBottom="30dp"
 android:ems="10" />

 <TextView
 android:id="@+id/textView3"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:text="@string/tv_telp" />

<EditText
 android:id="@+id/add_new_telp"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:hint="@string/hint_telp"
 android:inputType="textPhonetic"
 android:layout_marginBottom="30dp"
 android:ems="10" />

<TextView
 android:id="@+id/textView4"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:text="@string/tv_alamat" />

<EditText
 android:id="@+id/add_new_alamat"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:ems="10"
 android:minHeight="80dp"
 android:hint="@string/hint_alamat"
 android:inputType="textPostalAddress" />

</LinearLayout>

FormMahasiswa.java
Berikut adalah activity untuk menampilkan form Mahasiswa.


package org.pizaini.mahasiswaonline;

import org.apache.http.HttpStatus;
import org.pizaini.mahasiswaonline.entities.Mahasiswa;
import org.pizaini.mahasiswaonline.server.ServerRequest;

import android.os.AsyncTask;
import android.os.Bundle;
import android.app.ActionBar;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.EditText;
import android.widget.Toast;

public class FormMahasiswa extends Activity {
 private EditText textNim, textNama, textTelp, textAlamat;
 private ProgressDialog progressDialog;
 private ServerRequest server;
 private int replyCode;
 private Mahasiswa mahasiswa;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_form_mahasiswa);
 initView();
 server = new ServerRequest();
 ActionBar actionBar = getActionBar();
 actionBar.setDisplayHomeAsUpEnabled(true);
 mahasiswa = new Mahasiswa();
 if(getIntent().hasExtra("id")){
 String id = getIntent().getStringExtra("id");
 String nim = getIntent().getStringExtra("nim");
 String nama = getIntent().getStringExtra("nama");
 String telp = getIntent().getStringExtra("telp");
 String alamat = getIntent().getStringExtra("alamat");
 textNim.setText(nim);
 textNama.setText(nama);
 textTelp.setText(telp);
 textAlamat.setText(alamat);
 mahasiswa.setId(Integer.valueOf(id));
 }else{
 mahasiswa.setId(0);
 }
 }

 private void initView(){
 textNim = (EditText) findViewById(R.id.add_new_nim);
 textNama = (EditText) findViewById(R.id.add_new_nama);
 textTelp = (EditText) findViewById(R.id.add_new_telp);
 textAlamat = (EditText) findViewById(R.id.add_new_alamat);
 }

@Override
 public boolean onCreateOptionsMenu(Menu menu) {
 getMenuInflater().inflate(R.menu.form_mahasiswa, menu);
 return true;
 }

 private void goToMainActivity(){
 Intent in = new Intent(getApplicationContext(), MainActivity.class);
 in.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
 startActivity(in);
 }

 @Override
 public boolean onOptionsItemSelected(MenuItem item) {
 switch(item.getItemId()){
 case android.R.id.home:
 goToMainActivity();
 break;

 case R.id.option_menu_save:
 if(textNim.getText().toString().trim().isEmpty() || textNama.getText().toString().trim().isEmpty()){
 Toast.makeText(getApplicationContext(), "NIM dan Nama tidak boleh kosong", Toast.LENGTH_SHORT).show();
 }else{
 new FormMahasiswaAsync().execute();
 }
 break;
 }
 return super.onOptionsItemSelected(item);
 }

 private void sendRequest(){
 String nim = textNim.getText().toString();
 String nama = textNama.getText().toString();
 String telp = textTelp.getText().toString();
 String alamat = textAlamat.getText().toString();
 mahasiswa.setNim(nim);
 mahasiswa.setNama(nama);
 mahasiswa.setTelp(telp);
 mahasiswa.setAlamat(alamat);

/**Mengirimkan POST reques*/

replyCode = server.sendPostRequest(mahasiswa, ServerRequest.urlSubmit);
 }

 private class FormMahasiswaAsync extends AsyncTask<String, String, String>{
 @Override
 protected void onPreExecute() {
 progressDialog = new ProgressDialog(FormMahasiswa.this);
 progressDialog.setMessage("saving data...");
 progressDialog.setIndeterminate(false);
 progressDialog.setCancelable(false);
 progressDialog.show();
 }
 @Override
 protected String doInBackground(String... params) {
 sendRequest();
 return null;
 }
 @Override
 protected void onPostExecute(String result) {
 progressDialog.dismiss();
 if(replyCode == HttpStatus.SC_OK){
 goToMainActivity();
 }else{
 Toast.makeText(getApplicationContext(), "save data problem", Toast.LENGTH_SHORT).show();
 }
 }

 }

}

h. Membuat Detail Mahasiswa

Detail Mahasiswa berfungsi untuk menampilkan data lengkap. Karena pada ListView yang ditampilkan hanya NIM dan Nama.

activity_detail_mahasiswa.xml

</p>
<LinearLayout 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"
 android:orientation="vertical"
 android:layout_margin="5dp"
 tools:context=".DetailMahasiswa" >

<TextView
 android:id="@+id/textView1"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:text="@string/tv_nim" />

<EditText
 android:id="@+id/add_new_nim"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:hint="@string/hint_nim"
 android:enabled="false"
 android:layout_marginBottom="30dp"
 android:ems="10" >
 <requestFocus />
 </EditText>

<TextView
 android:id="@+id/textView2"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:text="@string/tv_nama" />

<EditText
 android:id="@+id/add_new_nama"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:hint="@string/hint_nama"
 android:enabled="false"
 android:layout_marginBottom="30dp"
 android:ems="10" />

 <TextView
 android:id="@+id/textView3"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:text="@string/tv_telp" />

<EditText
 android:id="@+id/add_new_telp"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:hint="@string/hint_telp"
 android:layout_marginBottom="30dp"
 android:enabled="false"
 android:ems="10" />

<TextView
 android:id="@+id/textView4"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:text="@string/tv_alamat" />

<EditText
 android:id="@+id/add_new_alamat"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:ems="10"
 android:minHeight="80dp"
 android:enabled="false"
 android:hint="@string/hint_alamat"
 android:inputType="textPostalAddress" />

</LinearLayout>

Activity DetailMahasiswa berguna untuk menampilkan data mahasiswa dengan layout activity_detail_mahasiswa.xml.


package org.pizaini.mahasiswaonline;

import org.pizaini.mahasiswaonline.entities.Mahasiswa;
import org.pizaini.mahasiswaonline.server.ServerRequest;
import android.os.AsyncTask;
import android.os.Bundle;
import android.app.ActionBar;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.EditText;
import android.widget.Toast;

public class DetailMahasiswa extends Activity {
 private EditText textNim, textNama, textTelp, textAlamat;
 private Mahasiswa mahasiswa;
 private ServerRequest server;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_detail_mahasiswa);
 mahasiswa = new Mahasiswa();
 server = new ServerRequest();
 initView();
 ActionBar actionBar = getActionBar();
 actionBar.setDisplayHomeAsUpEnabled(true);
 }

 private void initView(){
 textNim = (EditText) findViewById(R.id.add_new_nim);
 textNama = (EditText) findViewById(R.id.add_new_nama);
 textTelp = (EditText) findViewById(R.id.add_new_telp);
 textAlamat = (EditText) findViewById(R.id.add_new_alamat);

 String id = getIntent().getStringExtra("id");
 String nim = getIntent().getStringExtra("nim");
 String nama = getIntent().getStringExtra("nama");
 String telp = getIntent().getStringExtra("telp");
 String alamat = getIntent().getStringExtra("alamat");

 textNim.setText(nim);
 textNama.setText(nama);
 textTelp.setText(telp);
 textAlamat.setText(alamat);

 mahasiswa.setId(Integer.valueOf(id));
 mahasiswa.setNim(nim);
 mahasiswa.setNama(nama);
 mahasiswa.setTelp(telp);
 mahasiswa.setAlamat(alamat);
 }

@Override
 public boolean onCreateOptionsMenu(Menu menu) {
 getMenuInflater().inflate(R.menu.activity_main_action, menu);
 return true;
 }

 @Override
 public boolean onOptionsItemSelected(MenuItem item) {
 switch(item.getItemId()){
 case android.R.id.home:
 goToMainActivity();
 break;

 case R.id.action_menu_edit:
 Intent in = new Intent(getApplicationContext(), FormMahasiswa.class);
 in.putExtra("id", mahasiswa.getId().toString());
 in.putExtra("nim", mahasiswa.getNim());
 in.putExtra("nama", mahasiswa.getNama());
 in.putExtra("telp", mahasiswa.getTelp());
 in.putExtra("alamat", mahasiswa.getAlamat());
 startActivity(in);
 break;

 case R.id.action_menu_delete:
 delete();
 break;
 }
 return super.onOptionsItemSelected(item);
 }

 private void goToMainActivity(){
 Intent in = new Intent(getApplicationContext(), MainActivity.class);
 in.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
 startActivity(in);
 }

 private void delete(){
 AlertDialog.Builder builder = new AlertDialog.Builder(this);
 builder.setMessage("Delete "+mahasiswa.getNama()+" ?");
 builder.setTitle("Delete");
 builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
 public void onClick(DialogInterface dialog, int which) {
 new DetailMahasiswaAsync().execute();
 Toast.makeText(getApplicationContext(), "deleted", Toast.LENGTH_SHORT).show();
 }
 });
 builder.setNegativeButton("No", new DialogInterface.OnClickListener() {
 public void onClick(DialogInterface dialog, int which) {
 dialog.cancel();
 }
 });
 AlertDialog alert = builder.create();
 alert.setIcon(android.R.drawable.ic_menu_delete);
 alert.show();
 }
 private class DetailMahasiswaAsync extends AsyncTask<String, String, String>{

@Override
 protected String doInBackground(String... params) {
 server.sendGetRequest(ServerRequest.urlDelete+"?id="+mahasiswa.getId().toString());
 return null;
 }

 @Override
 protected void onPostExecute(String result) {
 Intent in = new Intent(getApplicationContext(), MainActivity.class);
 in.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
 startActivity(in);
 }

 }

}

i. Menambahkan Permission

Tambahkan permission ada AndroidManifest.xml


<uses-permission android:name="android.permission.INTERNET" />

Berikut adalah screenshot aplikasinya:

Main Activity

Main Activity

Contextual Action Bar (CAB)

Show Contextual Action Bar (CAD) on long-press List View

Form Mahasiswa

Form Mahasiswa

Detail Mahasiswa

Detail Mahasiswa

Delete Confirmation

Delete Confirmation

Silakan DOWNLOAD SOURCE LENGKAP (Eclipse Project dan PHP)

Silakan DOWNLOAD APK FILE nya untuk Android 3.0 (Honeycomb) atau yang terbaru.

GitHub project: BelajarAndroid.

Sekian posting hari ini, semoga dapat membahas lebih detail pada posting yang akan datang. semoga bermanfaat. Terima kasih.

 

UPDATE, Febuari 2014:

Link download telah diupdate…

  1. 13 June 2016 at 10:39

    sempurna…sangat membantu, tp untuk orang yg baru belajar spt saya (agaknya) terlalu banyak. mungkin kalo di sederhanakan bisa y mas ?
    dgn konsep OOP y kalo nga salah? ato yg lain ? makasih mas

  2. 9 June 2016 at 03:37

    gan mohon solusinya dong..kenapa data yang saya masukkan tidak muncul di database dan tidak mau menampilkan data yang sudah saya input di aplikasinya?atas perhatianya terimakasih..

  3. Taufik
    7 June 2016 at 10:09

    mas mau tanya, klo untuk pencariannya itu pke json ya ? klo tanpa json tapi menggunakan semacam algoritma itu bisa mas ? klo bisa ada contohnya ga mas ? terimakasih sebelumnya

    • 7 June 2016 at 13:02

      JSON itu hanya media transfer data antara client dan server, mas.. bagaimana cara mencari (termasuk algoritme) dapat disesuaikan sesuai keinginan..

  4. anang
    17 May 2016 at 09:35

    Mantap tutorialnya om
    Sukses Selalu

  5. 15 May 2016 at 14:24

    Mantap, ijin share ya.

  6. M.Arifin
    31 March 2016 at 16:40

    langkah awal yang harus dilakukan apa mas Pizaini.
    aku kok masih bingung.
    maaf ini masih newbie ;D

  7. M.Arifin
    31 March 2016 at 16:38

    Mas Langkah awal yang harus saya lakukan apa mas?
    maaf saya masih newbie ;D

  8. 14 March 2016 at 09:38

    pagi mas mau bertanya. membuat login dengan menggunakan ip bagaimana caranya mas ? contoh kasusnya saya berada pada pt.xx. pada pembuatan aplikasi ini apabila ingin login harus berada pada jaringan atau wifi pt.xx tersebut. apabila tidak maka tidak akan bisa login mas. terimakasih

    • 23 May 2016 at 13:22

      bikin server sendiri di pt.xx mas, set ip sama port nya, dihubungkan ke jaringan router pt.xx. ntar url servernya diisi ip server. di router nya, set port wifi dikasih akses ke ip server mas.

  9. 22 January 2016 at 02:11

    Selamat malam mas tolong bantu saya karna udah mumet blm ketemu solusinya…knp aplikasi saya yg sudah terhubung Json dan sudah koneksikan IP 10.0.2.2 sesuai localhost xampp bisa jalan mulus dan lancar di emulator ketika saya running via device hp saya hanya bisa buka tampilan pertama setelah saya klik button lain pasti keluar blank hitam dan akhirnya force close….mohon pencerahannya mas terima kasih

    • 23 January 2016 at 14:22

      barangkali IP nya mas. Dari emulator ke kopmuter pake IP 10.0.2.2. Klo dari device ke internet pake IP internet (domain). Klo dari real device untuk akses ke kopmuter, pake IP komputer nya mas. Misal mas mau pakai smartphone dan datanya ada di laptop. Mas bisa sharing koneksi dari laptop ke smartphone, jadi smartphone bisa mengakses server yang di laptop mas. IP yg dipakai bukan lagi 10.0.2.2, tp IP komputer/laptop mas sendiri. semoga membantu.

  10. andiliani
    5 January 2016 at 14:40

    terima kasih mas buat tutorialnya, tapi ada yang mau saya tanyakan mas, bisa gak ya mas input data sekalian output data tanpa menggunakan json ?

    • 5 January 2016 at 19:55

      JSON itu hanya salah satu caranya mas. klo ditanya apakah bisa tanpa JSON, jawabannya bisa banget…

  11. 24 December 2015 at 20:12

    bagus banget mas tutorialnya, maju terus !

  12. Anakpolos
    17 November 2015 at 19:18

    Mantap gan ijin sedot ilmunya untuk belajar🙂

  13. fifi
    9 October 2015 at 17:52

    Maaf pak mau tanya saya ini pakai android studio. di file serverrequest.java nya ada error di package org.apache.http itu solusi nya gimana pak?
    dan satu lagi pak “(R.menu.form_produk, menu)” form_produk itu di deklarasikan dimana pak?

  14. 2 September 2015 at 00:24

    tutorialnya mantap gan (y)
    ane udah coba gan bikin aplikasi serupa tapi jauh lebih sederhana dari ini, terus ane upload di hosting, nah permasalahanya ketika saya coba simpan data dari hp ke server kok malah force close ya. .
    heranya lagi udah ane cek tapi gak ada erornya sama sekali, di logcat pun nggak ada warna merah. .
    – ane udah cek file php yg udah di upload di hosting dan pas ane cek manggil di browser juga lancar gak ada problem
    – udah ane cek database + nama db di php juga udah bener
    – ane cek jason + url nya juga udah bener,
    – ane juga udah cek di manifestnya juga udah bener

    nah ini ane bingung salahnya dimana ya?
    padahal cuma bikin program simpan data

    mohon pencerahanya gan, kalo berkenan bisa dibuat tutorial integrasi langsung dengan hosting, siapa tau ada solusi gan. .
    plisss

  15. 27 August 2015 at 12:14

    Woww, kereeen mantaap banget postingan nya gan… aku coba gan, izin sedot source nya bwat referensi lokal

  16. alkautsar
    18 August 2015 at 09:16

    gan kalo file .php di simpan dimana ? apakah di satukan dengan folder android kita ? atau di simpan beda folder ?

    • 18 August 2015 at 14:27

      disimpan di mana aja terserah aja gan.. yg penting mudah diakses. klo contoh ane, file PHP di diletakin di folder “android”

  17. Naufal
    13 August 2015 at 08:09

    ada informasi yg menyebutkan PDO, yang salah bukan script.., tapi kesalahan setingan php hosting.., saat hosting, harus nya memilih seting php pada versi 5.2, karena, setting koneksi db pada script, menggunakan jenis koneksi lama, jadi kalo pada hosting, menggunakan 5.4, maka yg muncukl adalah pesan mysqli, 5.5 PDO

  18. Angga
    12 August 2015 at 02:52

    Hai min, saya ingin bertanya, semoga berkenan membantu yaa..
    Saya punya sebuah website portal berita, apakah saya harus membuat kode tersendiri untuk proses parsing JSON ini ?
    maksud saya, apakah bisa cukup dengan menggabungkan code json di halaman index untuk tampilan web normal sajaa..

  19. 28 June 2015 at 03:08

    permisi pak pizaini, saya pake android lolipop, waktu dijalankan datanya tidak muncul, padahal internet aktif,saya tlah coba server http://pizaini.my.phpcloud.com/android/, dan juga server http://bakdata.esy.es/android/ tapi hasilnya sama saja, saya mohon pencerahannya.
    informasi tambahan: saya import pake android studio, gak ada error aman.

    • 28 June 2015 at 05:55

      Sepertinya masih ada error di source PHP nya, mas..
      Coba cek dari web browser http://bakdata.esy.es/android/select_all.php
      ada muncul error:
      Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in /home/u563448908/public_html/android/connection.php on line 8

      Function mysql_connect() sudah tidak digunakan (deprecated) di PHP versi terbaru. Mungkin link ini bermanfaat http://www.sitepoint.com/avoid-the-original-mysql-extension-1/

      Semoga bermanfaat..
      FYI, server punya saya sudah tidak aktif lagi😀

  20. 18 May 2015 at 15:47

    Good article. I’m going through a few of these issues as well..

  21. 5 April 2015 at 23:18

    Reblogged this on JELLYFISH.

  22. 16 March 2015 at 22:09

    mas, kalau masalahnya begini gimana ya. saya sudah berhasil mencoba insert dan ambil data melalui database localhost menggunakan xampp. tapi begitu saya hosting dan pindah database ke hostingan agar online dan bisa diakses dimana saja. pas insert aplikasinya muncul Toast “Save Data Problem” padahal buat ambil data seperti username dan password bisa. hanya bagian insert untuk registrasi tidak bisa..

    padahal pas localhost insertnya bisa, dipindah ke hostingan jadi ga bisa. apakah saya salah settingan di database ya?
    Terimakasih🙂

    • 17 March 2015 at 11:22

      mungkin di script PHP nya mas.. coba di cek dulu apakah datanya bisa ditampilkan atau gak… atau akses via web browser.

  23. helmi
    23 February 2015 at 19:08

    link download mati gan..

    • 24 February 2015 at 09:42

      link OK gan… g ada masalah…

  24. anonim
    16 February 2015 at 11:30

    mas kalau mau ditambahin data IMAGE gmana parsing dengan json nya, untuk tutorial diatas kan cuma untuk file TEXT

    Makasih Tutorialnya, sangat membantu

  25. kimy
    9 February 2015 at 14:32

    mas, saya pake SDK android lollipop… list mahasiswa nya ga muncul, tp untuk insert bisa… itu knp ya mas…

  26. 21 January 2015 at 23:47

    Mas mau tanya, kalau kita mau nampilin list view seperti diatas, tapi ada parameter yang diinputkan gimana ya,, makasih sebelumnya

    • 22 January 2015 at 08:40

      parameter gimana mksudnya mas?🙂

      • 23 January 2015 at 10:51

        maksudnya begini mas,
        saya mempunyai satu variabel inputan dari java, dari variabel inputan ini akan saya gunakan untuk proses select ke database misalnya saya punya variabel bagian dan saya punya tabel t_user.
        dari variabel tersebut saya gunakan untuk perintah select contohnya : select * from user where bagian = $admin;
        yang jadi pertanyaan bagaimana mengirimkan variabel tersebut ke php dan mengeluarkan dalam bentuk list view seperti milik Mas Pizaini.
        mohon bantuanya. terima kasih

      • 23 January 2015 at 20:34

        saya coba bantu mas..🙂.
        Mas tinggal ambil nilai dari EditText nya. Trz di proses ke url PHP yg akan memproses querynya.
        Misal:
        ..
        urlGetByBagian = “getByBagian.php”;

        editTextBagian = (EditText) findViewById(R.id.editTextBagian);
        serverRequest.sendGetRequest(ServerRequest.urlGetByBagian+”?bag=”+editTextBagian)

        Truz dproses di PHPnya, sama seperti query mas di atas.

        semoga membantu🙂

  27. adra
    28 December 2014 at 15:44

    mas pizani mo nambahin, saya tadi kjadiannya sama kayak agan2 yang di atas, database ga muncul, saya curiga di php yg pertama di buat yaitu index.php… kalo index.php kan berarti ketika kita masuk folder android di htdocs lgsg tuh ngebuka index.php mangkanya database gak muncul, saran saya sih ksh tau k yang laen kalo sblom buat aplikasi di eclipse ubah dlu nama index.php jadi yang laen semisal index1.php

    • 22 January 2015 at 08:44

      terima kasih atas tambahannya mas… file index.php itu niatnya cuma utk mengecek apakah kita udah bisa konek ke server… itu aja sih mas.. jika mw diubah ke nama file lain, semua dikembalikan kpd agan2 semua… great idea mas…

  28. Lukman
    18 December 2014 at 00:08

    Mas saya sudah ganti ip 10.0.2.2 menjadi ip komputer saya tetapi ngk bisa muncul pesan lukmanjson berhenti. Apakah pengaruh xampp saya install di E

  29. suci
    17 December 2014 at 10:38

    gan mau nanya, server aktif dan MySQL sudah aktif, direktori ny juga udah bener, tapi ngetes localhost ga mau. saya make genymotion, apa memang ada bedanya dengan AVD?

  30. 11 December 2014 at 10:12

    Pak, Mau Tanya,
    Saya ada tugas kuliah untuk membuat aplikasi client server berbasis android seperti ini ada perintah insert, update, delete dan select all, tapi database yang dipake adalah SQL Server 2012
    mohon pencerahannya pak, kalau bisa saya request contohnya,
    terima kasih.

  31. naufal
    14 November 2014 at 14:46

    gan,mau tanya klo gini solusinya gimana?
    Warning: mysql_connect(): Access denied for user ‘root’@’localhost’ (using password: YES) in E:\bahan gawe sekolah\web\mboh\xampp\htdocs\android\connection.php on line 2
    Access denied for user ‘root’@’localhost’ (using password: YES)

    • 14 November 2014 at 15:30

      default nya “root” itu tanpa password mas. setting aja passwordnya kosong. Atau bisa juga karna passordnya salah…

  32. naufal
    14 November 2014 at 14:45

    gan,mau tanya klo gini solusinya gimana??
    Warning: mysql_connect(): Access denied for user ‘root’@’localhost’ (using password: YES) in E:\bahan gawe sekolah\web\mboh\xampp\htdocs\android\connection.php on line 2
    Access denied for user ‘root’@’localhost’ (using password: YES)

  33. Jais
    22 October 2014 at 22:22

    Mas saya mau nanya..
    Kalo misal pencariannya pakai EditText biasa (yang tinggal di drag and drop) terus pakai button itu gimana mas kodenya? Aku udah coba2 belum jadi ini…

    Yang di ubah cuma ini kan mas,
    ==============================================================

    public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.activity_main, menu);
    SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
    SearchView searchView = (SearchView) menu.findItem(R.id.option_menu_search).getActionView();
    searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
    searchView.setIconifiedByDefault(false);
    searchView.setOnQueryTextListener(this);
    searchView.setQueryHint(“nama atau nim”);

    return true;
    }
    ….
    @Override
    public boolean onQueryTextChange(String newText) {
    adapter.getFilter().filter(newText);
    return true;
    }

    @Override
    public boolean onQueryTextSubmit(String query) {
    return false;
    }

    ===========================================================
    Udah aku ubah jadi gini mas
    ===========================================================
    public void ClickSearch() {
    Button searchFoods = (Button)findViewById(R.id.searchbutton);
    searchFoods.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {
    //EditText pencarian = (EditText)findViewById(R.id.searchtext);

    //kode kode and code search haha
    //SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
    EditText pencarian = (EditText)findViewById(R.id.searchtext);

    //pencarian.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
    pencarian(getComponentName());
    //pencarian.setIconifiedByDefault(false);
    pencarian.setOnClickListener(this);
    //pencarian.setHint(“nama”);

    }

    private void pencarian(ComponentName componentName) {
    // TODO Auto-generated method stub
    }
    });
    }
    ======================================================
    Tapi tetap aja gak jalan mas, kira2 kenapa ya mas?
    Mohon pencerahannya mas….
    Terimakasih banyak🙂

  34. Nero
    5 September 2014 at 10:33

    Mas nya lagi, tiu localhost saya “http://10.0.2.2/latihan/android” , kalo di cek pake browser android jalan, tp kalo browser laptop ga jalan. kenapa ya ?, apa ini salah satu faktor kalo database saya yang di loclhost ga nongol d aplikasi ?

    • 7 September 2014 at 11:28

      kalo dari android pke 10.0.0.2 mas.. tapi klo yg akses dari browsser laptop, tetap pke localhost biasa (IP 127.0.0.1)…
      ntar kalo servernya udah diupload ke internet, tinggal ganti url nya aja…

  35. Nero
    5 September 2014 at 10:00

    Mas mau tanya, itu kan aplikasi nya pake sever url nya “http://pizaini.my.phpcloud.com/android” , trus kalo di ganti pake localhot dmn nulis nya.
    punya saya saya masukin di folder xampp/htdoc/latihan/android.
    trus saya tulil d server url nya “http://10.0.0.2/latihan/android”, dan file database nya sudah saya import ke phpmyadmin, tp tetep ga bisa. mohon pencerahannya.

  36. si_ipiet
    16 July 2014 at 11:52

    mohon pencerahan mas, klo qt tanpa OL ke internet dan databsenya pake OpenSource[debian] gmn ya caranya?
    makasih buanyak

  37. jeffri
    15 July 2014 at 22:51

    upload file di winscp nya ke folder yang mana mas

  38. awus awus
    8 July 2014 at 09:06

    makasi banyak yaaaaaaaaaaaaaaaaaaaaaaaaa . membangtu banget🙂

  39. Miftah
    5 July 2014 at 21:25

    maaf om, saya mau nanya untuk masalah database, itu kita buat di PC kan??, dan cuma ngambil local host PC, kalau untuk koneksi internet itu gimana om? contohnya PC nyambung ke TPlink dan HH juga nyambung, nah itu kan pake IP PC nya, itu bisa gak om? kalau bisa, script yang di ganti yang mananya?
    sebelumnya terima kasih banyak tutornya ^_^

  40. 24 June 2014 at 20:07

    Mas, saya mau nanya itu buat databasenya gimana yah? Sorry masih newbie, btw thanks tutorialnya

  41. ikram
    5 June 2014 at 00:53

    gan,,servernya tu pakek lettob ya?

  42. Tzar Rifqi
    21 May 2014 at 19:31

    Mas Pizaini.. saya coba tutorial mas pizaini dari awal sampai akhir tidak ada masalah,, dan tidak error.. terima kasih sekali tutorialnya sangat membantu.

    kemudian saya coba download app ini yang sudah mas pizaini upload.. saya install dihandphone pun tidak ada masalah..

    tapi kalau koneksi client server ini saya ganti alamatnya dengan localhost, kemudian saya install di handphone lalu saya koneksikan handphone ini menggunakan wireless, apakah tetap bisa mas? soalnya saya coba tetap tidak terkoneksi..

    handphone tidak bisa menampilkan database yang terdapat dilaptop saya.. terima kasih mas

    • 29 May 2014 at 18:09

      kalau mw dicoba via handphone yang terkoneksi pake wifi, hanya perlu disesuaikan dengan alamat IP servernya. Misalnya laptop mas punya IP 192.168.49.1, jadi di aplikasinya, alamat server diganti menjadi alamat IP tersebut. selamat handphone bisa konek ke laptop, menurut saya g masalah.yg penting IP nya aja mas yg disesuaikan.. trims

  43. Amel
    6 April 2014 at 16:37

    mas mau nnya nih.. kan ak udah download source code dri masnya.. tp kok ngak mau nampil yah.. tampil klo saya pake urlnya private final String serverUri = “http://pizaini.my.phpcloud.com/android”; mau nampil.. tp klo saya ganti dengan “http://127.0.0.1/android”;.. malah ngak nampil sama skli,…
    itu kenapa yah mas?
    makasih… mohon bantuannya gan..

    • 6 April 2014 at 21:04

      bisa jadi karna server lokal ny ga aktif mas… bisa dicek url lokalny sudah benar atau belum.. cek dari browser Android juga bisa..

  44. 3 April 2014 at 07:41

    Teri.a kasih tutornya mas..boleh tanya gak..apa aplikasi semacam ini bisa menggunakan login admin/member..supaya data tidak d edit sembarang member..terima kasih sebelumnya

  45. NN
    25 February 2014 at 12:09

    mantap banget mas tutorialnya.. bermanfaat bagi kita yg sedang mempelajari Android. Semoga diberikan pahala yg melimpah oleh Sang Maha Kuasa.

    Terima Kasih…

  46. dendy
    5 February 2014 at 20:41

    Mantap banget nih tutorialnya..mksh bngt yah om dah berbagi tutorialnya…tapi pas saya coba delete, prosesnya emg kedelete tapi pas dicek lagi dimahasiswa online kok msh ada, kyk gak kedelete gtu..tolong pncerahanny ya om..thx..

  47. 30 January 2014 at 23:43

    mas saya dah coba download dan aplikasikan smuanya,, nah Ada masalah ini untuk package server requestnya kok erorr, semua …. tapi yang ada tanda silangnya hanya di request server.java…. apa itu mempengaruhi smuanya??,,, apa model emulatornya berpengaruh atau yang lainnya mas???

    terimakasih sebelumnya

  48. HELP ME!
    5 January 2014 at 09:44

    Masalah: LIST VIEW DATA TIDAK TAMPIL
    mas mau tanya,saya sudah berhasil koneksikan app ini ke server. tapi kok di mainactivity.java listview datanya gak ke tampil yah. padahal data yang diinputkan sudah tersimpan di database server.
    Mohon bantuannya mas hehe

    • Joni Jontor
      13 March 2014 at 21:27

      Saya juga ga tambil data nya di list view. Kenapa ya mas ?

  49. 1 January 2014 at 07:47

    nice post Mr.
    biasanya kan klo sebuah aplikasi seperti itu adanya hak akses Mr,,,
    klo boleh request, tutorial untuk membuat Login’y Mr. !!!!
    ^_^

    Thanx…
    ditunggu tutorialnya!!! ^_^

  50. 29 December 2013 at 02:15

    Mantap dahhhh

  51. 26 December 2013 at 14:35

    mas saya nyobak untuk buat dan download dari project yang mas buat tapi masalahnya tetap saja. data yang dibuat didatabase tidak bisa ditampilkan, padahal waktu saya test di lewat browser laptop dan emulator data tesebeut bisa ditampilkan. solusinya gimana mas?? mohon pencerahannya

  52. 21 December 2013 at 11:17

    sama yang di “android:text=”@string/tv_nim” />”
    selalu error dengan bacaan error: Error: No resource found that matches the given name (at ‘text’ with value ‘@string/tv_nim’).

    • 21 December 2013 at 12:14

      sepertinya gak ada file xml folder res/value/…..
      biasanya strings.xml.coba cek apakah ada property “tv_nim”..

      • 21 December 2013 at 12:38

        sebelumnya terima kasih tutorialnya mas, sedikitnya saya sudah mulai mengerti..
        makash mas pizaini

      • 22 December 2013 at 08:20

        sama2 mas..semoga bermanfaat

  53. 21 December 2013 at 11:16

    mas kalo errornya disini kenpa ya? mohon pencerahannya mas, masih belajar2 android
    error: Error: No resource found that matches the given name (at ‘text’ with value ‘@string/tv_nim’).
    error nya ada di xml activity_detail_mahasiswa sama di xml form mahasiswa.
    yang bersangkutan dengan hint semuanya eror mas, kenapa ya?

  54. 21 December 2013 at 11:15

    mas kalo errornya disini kenpa ya? mohon pencerahannya mas, masih belajar2 android
    error: Error: No resource found that matches the given name (at ‘text’ with value ‘@string/tv_nim’).
    error nya ada di xml activity_detail_mahasiswa sama di xml form mahasiswa.
    yang bersangkutan dengan hint semuanya eror mas, kenapa ya?

  55. Rav
    18 December 2013 at 22:11

    gan kalo misalnya data yang tampil di listview kita seleksi kemudian data yang di pilih di tampilin ke form berikutnya gmana carany??
    hehe maklum msi newbie

    • 19 December 2013 at 05:49

      di app ini, list view bisa di seleksi gan.. dan ditampilkan di form berikutnya (update atau delete).

  56. dini
    17 December 2013 at 20:56

    permisi mas.. kalo gak upload ke server bisa konek gak mas client nya?

    • 18 December 2013 at 07:46

      app ini masih sederhana dan hanya didesain untuk koneksi data yang selalu terhubung. Jadi kalo koneksi internet putus, g bisa nyimpan data ke server.
      Perlu perubahan dan modifikasi lagi… smoga membantu

  57. Arviaputra
    3 December 2013 at 22:13

    Thanks ya bro,berguna banget nih🙂

  58. pim
    27 November 2013 at 15:38

    mas mau tanya, untuk upload data ke server harus ada koneksi internet ya?
    trus gak pake emulator tp pake hp, caranya gmn y??
    maaf newbie..
    terima kasih

    • 27 November 2013 at 18:01

      kalo upload data ke server tentu pke koneksi internet mas..
      baik emulator atao lewt hp langsung…
      smoga membantu

  59. 16 November 2013 at 21:51

    mas, mau tanya, kenapa saya dapet error di menu ya..

    setiap yg di method
    public boolean onCreateActionMode(ActionMode mode, Menu menu) {
    getMenuInflater().inflate(R.menu.activity_main_action, menu);
    return true;
    }
    pasti error : activity_main_action cannot resolved or is not a field,
    padahal saya cuma copy paste script dari mas..
    trus, karena bagian itu error, jadi pengaruh ke yg lain juga mas, yg ada hubungannya dgn menu
    mohon pencerahannya..🙂 terima kasih

    • 17 November 2013 at 23:02

      saya sarankan untuk tidak copy paste source code.
      Di Android, tidak hanya file java yang terlibat, tetapi ada file lain misal file xml dan file yg auto generate oleh IDE.

      Kebetulan yg mas copy adalah yg berhungan dengan xml ny.
      “R.menu.activity_main_action” itu diambil dari file xml yang ada di direktori menu. Kalo file ini sudah ada dan masih error, biasanya karna file R.java tidak mengenerate dengan baik.
      semoga membantu

  60. naffa
    13 November 2013 at 16:02

    mas trimaksi sebelumnya nih yang ku carii…
    gimana mana caranya agar bisa berjalan di versi 2.3 …apa ada yang harus di buang sourcenya…

    • 16 November 2013 at 08:13

      kalo mau dijadikan versi 2.3, tinggal disesuaikan aja. salah satu nya menu Action Bar.

  61. isun
    13 November 2013 at 12:31

    mantaaap gan…bermanfaat sekali tutorialnya..terimakasih

  62. pulung
    11 November 2013 at 11:11

    mas, mau tanya apa perbedaan dan fungsi dari :
    package org.pizaini.mahasiswaonline.entities;
    package org.pizaini.mahasiswaonline.server;
    package org.pizaini.mahasiswaonline;

    • 16 November 2013 at 08:14

      itu package mas. Biasanya digunakan untuk mengelompokkan beberapa class…

  63. rahman mukhlis
    5 November 2013 at 21:41

    mas, sy udah ngikutin cara mas d atas dgn benar dan teliti,app nya ga ada yg error. tp kok databasenya gamau muncul yah d app nya ? database yg sy buat jg udah bner mas, jadi klo input data di form mahasiswa itu klo di save gabisa mas😦
    knp itu mas ? mohon bantuan yah..

    balas via email saja mas

    rahmanmukhlis@gmail.com

    thnx,sori ngrepotin mas

    • 6 November 2013 at 06:01

      coba cek lagi alamat url nya, atau cek apakah database nya sudah aktif. Coba mas download dulu source yg dari saya, dan coba di komputer mas, apakah jalan atau tidak.
      semoga membantu…

  64. 26 October 2013 at 04:27

    blm bisa mas foreclose, minta contoh di javanya mas untuk model sprti itu.. maaf mas newbie

    • 27 October 2013 at 05:29

      Silakan download project nya gan… source code project nya juga udah tersedia.

  65. 23 October 2013 at 19:28

    mas kalau misal buat login dengan server request dan anggota itu gmn mas?
    kan mengirim user n pwd, lalu menerima respon
    {“sukses”:1} nah untuk memprosesnya gmn mas?
    bantu yak mas🙂

    • 24 October 2013 at 06:44

      konepnya sama gan. klo mau ditambahkan response misal {sukses: 1},
      kita tinggal tambahkan di script serversidenya (PHP). Misal, jika login sukses {response: 1}, kalo gagal {response: 0}.

      truz jangan lupa tambahkan sedikit di Sript Java nya yg memproses JSON object.

      sederhanya mungkin begitu mas…semoga membantu

  66. 23 October 2013 at 19:16

    mas kalau misal buat login dengan server request dan anggota itu gmn mas?
    Kan mengirim dan menerima respon. Ane nyerah gan..😦
    Mohon bantuannya gan..

  67. rasi
    20 October 2013 at 20:45

    atau bisa kirimkan ke email ya mas.,,

    rasibintang@ymail.com

    r4si.b1nt4ng@gmail.com

    maaf repotin.,,

    • 21 October 2013 at 18:51

      Silakan download dari link nya mas.. sepertinya tidak ada masalah dengan link downloadnya.. trm kasih…

  68. rasi
    20 October 2013 at 20:05

    saya coba unduh source code_x koq gak bisa yaa.,,

    mohon bantuannya mas.,,

    mungkin ada mirror source codenya

    • 21 October 2013 at 18:52

      saya sudah coba dan g ada masalah dengan link downloadnya..

  69. 18 October 2013 at 13:15

    thanks atas sharenya gan… semoga berkah ilmunya…

    • 18 October 2013 at 14:34

      amiiin…. sama2 gan…

  70. dewa
    17 October 2013 at 04:15

    Ini baru namanya berbagi,
    makasih untuk ilmunya gan, tetap sukses

    • 17 October 2013 at 08:39

      sama2 gan… semoga bermanfaat

  71. zetta
    10 October 2013 at 16:13

    pak mau tanya,

    kalau kita mau menampilkan file gambar yang di simpan di database MySQL
    di Aplikasi Android menggunakan JSON.. apakah Bisa Pak?

  72. yafie miftah
    24 September 2013 at 11:45

    mas pizaini mau tanya. sudah saya jalankan ke emulator..sudah berjalan dengan lancar..sya bingung dengan data di emulator..knp datanya gak sesuai dengan database yg telah kita buat di localhost php my admin?

    dan mau tanya lagi..gmn langkah2 supaya program itu bisa saya jalankan k hp?
    trimakasih

    • 24 September 2013 at 22:15

      coba cek arah URL nya.. di d file ServerRequest.java.. kalo ke localhost, IP nya 10.0.2.2..

      kalo mau dijalankan di hp, konekkan HP ke laptop dan aktifkan mode debug di hp androidnya.. ntr pas di run-pilih perangkat (device) nya HP..

      atau dengan mengeksport file .apk nya. kalo di eclipse bisa deri menu android tools->Export Signed atau Unsigned App. nanti file apk di copy ke HP dan diinstal.

  73. 23 September 2013 at 15:41

    Mas, Ini Versi Minimalnya berapa yaa?
    soalny saya pake yag 2,3,3

    • 24 September 2013 at 10:29

      versi 4.0 mas (ICS)…

  74. Anes
    21 September 2013 at 12:55

    Mas Pizaini, terimakasih sebelumnya atas ilmunya🙂
    Mau nanya klo R.id.option_menu_search apa ya? soalnya error “cannot be resolved or is not a field”
    thanks

    • 21 September 2013 at 14:05

      R.id.option_menu_search itu menu. Yang ada di Action Bar. file nya di res/menu/activity_main.xml

  75. arLya23moush
    10 September 2013 at 02:39

    maksud saya pencarian🙂

  76. arLya23moush
    10 September 2013 at 02:33

    mas klo mau nambah fitur pencadian listview gmn ya ?
    kan kurang efektif klo datanya sangat banyak ?

    • 10 September 2013 at 18:03

      di posting sudah ada fitur pencarian berdasarkan listView nya… kalo mau ditambahkan lagi, silakan tambahkan sesuai dengan kebutuhan.

  77. ugin
    6 September 2013 at 16:31

    kak maaf mau tanya, saya coba source code dari kaka, trus di run di HP, url nya saya ganti pake IP endiri, stlh retrieving yang muncul cuma layar blank, ga da tulisan papa, kalau misal saya tambah data ga da keterangan saving data problem, tapi tetep retrieving dan setelah itu blank lagi, ga kluar data apapa, kenapa ya ka? mohon bantuannya..
    oia, android saya pake yang ice cream sandwich

    • 7 September 2013 at 21:43

      coba dicek lagi link PHP nya dari web browser. Apakah ada reply data nya (JSON data) …
      dan coba ganti timeout nya jadi 5000.

      semoga membantu

  78. i'bud
    3 September 2013 at 20:42

    maaf mas mau nanya ,, maklum newbie

    di server request error semua , , ,??
    gmna cara menambah versi android 4.0 di emulator?

    • 4 September 2013 at 11:23

      tambah emulator baru dari Android Vitrtual Device (AVD) Manager. Disitu bisa ditambah emulator baru dan pilih versi android yang diinginkan.

      • i'bud
        4 September 2013 at 15:01

        di emulator pilihannya mentok di versi 2.3 , ,

        apa harus ada yng di instal lgy ?

        mohon pencerahannya .. mkasih

      • 4 September 2013 at 21:37

        kalo belum ada versi android 4.0, harus diinstal dulu dari dari SDK Manager. Situ kita bisa menambah platform 2.3, 3.0, 4.0, dst…

        Atau bisa cek disini:
        http://developer.android.com/sdk/installing/adding-packages.html

        Misalnya kita ingin instal platform yang 4.0, cukup ceklis yang 4.0 saja. Setelah instalasi selesai, baru buat AVD lagi dengan Android 4.0…

  79. Yasser
    31 August 2013 at 15:29

    Mas, Ada masalah ini untuk package server requestnya kok erorr, semua import an librarynya ga berfungsi, Tolong pencerahaannya mas😦

    • 1 September 2013 at 06:13

      coba di clean project dulu… karna gak ada libraru external di project ini. Dan pastikan versi Android nya 4.0 ke atas…

  80. 29 August 2013 at 16:18

    saya menemukan beberapa masalah yang anak,
    1 pertama kali run project failed to install
    2 run project untuk kedua kalinya setelah saya clean projectnya sudah success, tpi unfortunately mahasiswa has stopped
    kemudian, saya cobak timeoutnya saya panjangkan udah bisa masuk aplikasinya, dan proses berhasil
    3 kemudia selang beberapa hari (sekitar 3 hari kalau ga salah) saya buka kembali app nya kembali muncul error unfortunately mahasiswa has stopped saya coba ulang2 seperti kejadian sebelumnya tidak terjadi apa2

    untuk mengatasi masalah tersebut bagaimana? saya sempet baca2 pake asycntask tapi saya belum mengerti , apakah masalah ini dipengaruhi kinerja emulator atau versi dari API juga mempengaruhi untuk masalah ini? mohon penjelasaannya supaya saya bisa lebih mengerti

    terima kasih untuk sebelumnya😀

    • 30 August 2013 at 21:08

      bisa jadi karna emulatornya. karna emulator biasanya memerlukan spesifikasi prosesor dan memori yang cukup besar. jadi terkadang lambat kalo menjalankan emulator. Atau bisa menggunakan device android langsung tanpa emulator. jadi tidak membebani kinerja komputer. Untuk aplikasinya, terkadang masih bisa terjadi error. krna aplikasi ini masih banyak kekurangan, terutama dalam manajemen asynk task nya.
      semoga membantu…🙂

  81. fa
    28 August 2013 at 23:22

    mantap postnya nih… lanjutkan!!

    salam coding
    xD

  82. 20 August 2013 at 11:56

    Saya sudah coba semuanya dan tidak ada error tpi ketika saya jalankan dapat pesan Unfortunately mahasiswa online has stopped , udah cari2 problemnya di mana tpi ga ketemu, adakah solusi?

    • 20 August 2013 at 18:53

      Yupz, error ini juga saya temukan. Kalo kita lihat di Log Cat, errornya di file ServerRequest.java line 63. Tapi sebenernya bukan pada line tersebut. Errornya ada di line 49: HttpResponse httpResponse = httpClient.execute(httpGet);

      Mungkin masalahnya ada di timeout yang diset 3 detik. Saya coba ganti menjadi 5 detik (5000 ms), errornya sudah tidak adalagi.
      semoga membantu.

      • 22 August 2013 at 08:50

        Timeoutnya sudah saya coba ganti2 tapi masih tetap ini erorrnya yang ada di logcat saya ga bisa menemukan letak salahnya di mana -__-

        08-21 21:39:41.693: E/AndroidRuntime(1061): FATAL EXCEPTION: main
        08-21 21:39:41.693: E/AndroidRuntime(1061): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.customizedlistview/com.example.customizedlistview.CustomizedListView}: android.os.NetworkOnMainThreadException
        08-21 21:39:41.693: E/AndroidRuntime(1061): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2211)
        08-21 21:39:41.693: E/AndroidRuntime(1061): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
        08-21 21:39:41.693: E/AndroidRuntime(1061): at android.app.ActivityThread.access$600(ActivityThread.java:141)
        08-21 21:39:41.693: E/AndroidRuntime(1061): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
        08-21 21:39:41.693: E/AndroidRuntime(1061): at android.os.Handler.dispatchMessage(Handler.java:99)
        08-21 21:39:41.693: E/AndroidRuntime(1061): at android.os.Looper.loop(Looper.java:137)
        08-21 21:39:41.693: E/AndroidRuntime(1061): at android.app.ActivityThread.main(ActivityThread.java:5103)
        08-21 21:39:41.693: E/AndroidRuntime(1061): at java.lang.reflect.Method.invokeNative(Native Method)
        08-21 21:39:41.693: E/AndroidRuntime(1061): at java.lang.reflect.Method.invoke(Method.java:525)
        08-21 21:39:41.693: E/AndroidRuntime(1061): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
        08-21 21:39:41.693: E/AndroidRuntime(1061): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
        08-21 21:39:41.693: E/AndroidRuntime(1061): at dalvik.system.NativeStart.main(Native Method)
        08-21 21:39:41.693: E/AndroidRuntime(1061): Caused by: android.os.NetworkOnMainThreadException
        08-21 21:39:41.693: E/AndroidRuntime(1061): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1133)
        08-21 21:39:41.693: E/AndroidRuntime(1061): at java.net.InetAddress.lookupHostByName(InetAddress.java:385)
        08-21 21:39:41.693: E/AndroidRuntime(1061): at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)
        08-21 21:39:41.693: E/AndroidRuntime(1061): at java.net.InetAddress.getAllByName(InetAddress.java:214)
        08-21 21:39:41.693: E/AndroidRuntime(1061): at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:137)
        08-21 21:39:41.693: E/AndroidRuntime(1061): at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
        08-21 21:39:41.693: E/AndroidRuntime(1061): at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
        08-21 21:39:41.693: E/AndroidRuntime(1061): at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360)
        08-21 21:39:41.693: E/AndroidRuntime(1061): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
        08-21 21:39:41.693: E/AndroidRuntime(1061): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
        08-21 21:39:41.693: E/AndroidRuntime(1061): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
        08-21 21:39:41.693: E/AndroidRuntime(1061): at com.example.customizedlistview.XMLParser.getXmlFromUrl(XMLParser.java:45)
        08-21 21:39:41.693: E/AndroidRuntime(1061): at com.example.customizedlistview.CustomizedListView.onCreate(CustomizedListView.java:40)
        08-21 21:39:41.693: E/AndroidRuntime(1061): at android.app.Activity.performCreate(Activity.java:5133)
        08-21 21:39:41.693: E/AndroidRuntime(1061): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
        08-21 21:39:41.693: E/AndroidRuntime(1061): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2175)
        08-21 21:39:41.693: E/AndroidRuntime(1061): … 11 more

        mungkin bsa menemukan solusi lainnya
        atau ram komputer juga pengaruh…

      • 22 August 2013 at 13:26

        Edit saya sudah bsa membuka aplikasinya tpi menemukan masalah yang lain yakni data yang sudah kita buat melalui file Php tidak ada, dan ketika saya mencoba untuk menambah data, pesannya sudah berhasil tpi ketika saya check di phpmyadmin datanya tidak tersimpan , itu kira2 kenapa ya?

      • 23 August 2013 at 18:42

        Coba cek lagi koneksi emulator atau ponsel nya ke database dan file PHP. Kalo pake emulator, alamat servernya 10.0.2.2. kalo di HP, sesuaikan dengan alamat server yang dipake. Atau untuk menceknya bisa juga pake server yang punya saya di http://pizaini.my.phpcloud.com/android/ sebagai acuan.

  83. deni
    15 August 2013 at 23:40

    maav mas pizaini numpang tanya..variabel R.menu.activity_main_action itu dari mana yah??soalnya dari file-file yg dibuat variabel tau nama activity itu gag ada

    • 16 August 2013 at 18:58

      R file adalah file yang digenerate secara otomatis oleh ADT. Karena digenerate, kita tidak perlu mengedit file tersebut. R file merujuk pada resource yang kita buat. Misalnya layout, cara memanggilnya adalah R.layout..xml. Jadi, R.menu.activity_main_action: file yang berada pada pada direktori res/menu/activity_main_action.xml

  84. bafukku
    25 June 2013 at 21:51

    Tutorial yg sangat bermanfaat, boleh request tutorial gak? Dalam aplikasi agan menguploadnya ke my.phpcloud.com bisa di huat gak tutorialnya supaya bisa konek ke internet langsung kayak punya agan?

    • 26 June 2013 at 07:17

      Untuk upload script ke server, bisa ke server mana saja. contoh milik saya hanya salah satunya. silakan register di phpcloud.com dan disana nanti kita akan dikasih satu sub domain dan satu database MySQL (dan PHPMyAdmin). Cara upload juga ada diterangkan disana dan cukup jelas gan. Salah satunya pake WinSCP. thanks gan..

  1. No trackbacks yet.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: