Aplikasi Client Server PDF
Aplikasi Client Server PDF
16
17 INSERT INTO `mahasiswa` ( `nim`, `nama`, `telp`, `alamat`)
VALUES
18
( '2222', 'aaaa', '0801', 'Alamat 1'),
19
( '1111', 'bbbb', '0802', 'Alamat 2'),
20
( '2222', 'cccc', '0803', 'Alamat 3'),
21
( '3333', 'dddd', '0804', 'Alamat 4'),
22
( '1111', 'eeee', '0805', 'Alamat 5'),
23
( '2222', 'ffff', '0806', 'Alamat 6'),
24
( '3333', 'gggg', '0807', 'Alamat 7'),
25
( '4444', 'hhhh', '0808', 'Alamat 8'),
26
( '5555', 'iiii', '0809', 'Alamat 9');
1 <html>
2 <head>
3 <title>Index Android</title>
4 </head>
5 <body>
6 <h3>Index Android</h3>
7 </body>
8 </html>
connection.php
1 <?php
2
3 /*silakan sesuaikan dengan konfigurasi server Anda*/
4 $conn = mysql_connect('localhost', 'root', 'xxxxx') or
die(mysql_error());
5
$db = mysql_select_db('latihan_android') or die(mysql_error());
6
?>
select_all.php
1 <?php
2
3 /*reply data dalam JSON */
4
5 include('connection.php');
6 $query = 'select * from mahasiswa';
7 $result = mysql_query($query) or die(mysql_error());
8
9 $data = array();
10 while($row = mysql_fetch_object($result)){
11 $data['mahasiswa'][]= $row;
12 }
13 echo json_encode($data);
14 ?>
submit_mahasiswa.php
1 <?php
2
3 /**jika id = 0,maka akan dilakukan insert, jika tidak update berdasarkan id */
4 include('connection.php');
5
6 $id = (int)$_POST['id'];
7 $nim = $_POST['nim'];
8 $nama = $_POST['nama'];
9 $telp = $_POST['telp'];
10 $alamat = $_POST['alamat'];
11
12 $query = 'insert into mahasiswa (nim, nama, telp, alamat) values ("'.$nim.'", "'.$nama.'", "'.
"'.$alamat.'")';
13
if($id > 0){
14
$query = 'update mahasiswa set nama = "'.$nama.'", nim = "'.$nim.'", telp = "'.$telp.'", al
15 "'.$alamat.'" where id = '.$id;
16 }
17 mysql_query($query) or die(mysql_error());
18
?>
delete_mahasiswa.php
1 <?php
2
3 /**menghapus mahasiswa berdasarkan id*/
4 include('connection.php');
5 $id = (int)$_GET['id'];
6 $query = 'delete from mahasiswa where id = '.$id;
7 $result = mysql_query($query) or die(mysql_error());
8 if(mysql_affected_rows() > 0){
9 echo 'deleted id = '.$id;
10 }else{
11 echo 'NOT founnd id = '.$id;
12 }
13 ?>
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
urlhttp://10.0.2.2/android/index.php
10.0.2.2 adalah host default untuk mengakses server local.
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
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
1 package org.pizaini.mahasiswaonline.entities;
2
3 public class Mahasiswa {
4 private Integer id;
5 private String nim;
6 private String nama;
7 private String telp;
8 private String alamat;
9
10 public Mahasiswa() {
11 super();
12 }
13
14 public Mahasiswa(Integer id, String nim, String nama, String
telp,
15
String alamat) {
16
super();
17
this.id = id;
18
this.nim = nim;
19
this.nama = nama;
20
this.telp = telp;
21
this.alamat = alamat;
22
}
23
24
public Integer getId() {
25
return id;
26
}
27
28
public void setId(Integer id) {
29
this.id = id;
30
}
31
32
public String getNim() {
33
return nim;
34
}
35
36
public void setNim(String nim) {
37
this.nim = nim;
38
}
39
40
public String getNama() {
41
return nama;
42
}
43
44
public void setNama(String nama) {
45
this.nama = nama;
46
}
47
48
public String getTelp() {
49 return telp;
50 }
51
52 public void setTelp(String telp) {
53 this.telp = telp;
54 }
55
56 public String getAlamat() {
57 return alamat;
58 }
59
60 public void setAlamat(String alamat) {
61 this.alamat = alamat;
62 }
63
64 }
1 package org.pizaini.mahasiswaonline.server;
2
3 import java.io.BufferedReader;
4 import java.io.IOException;
5 import java.io.InputStream;
6 import java.io.InputStreamReader;
7 import java.util.ArrayList;
8 import java.util.List;
9 import org.apache.http.HttpEntity;
10 import org.apache.http.HttpResponse;
11 import org.apache.http.HttpStatus;
12 import org.apache.http.NameValuePair;
13 import org.apache.http.StatusLine;
14 import org.apache.http.client.HttpClient;
15 import org.apache.http.client.entity.UrlEncodedFormEntity;
16 import org.apache.http.client.methods.HttpGet;
17 import org.apache.http.client.methods.HttpPost;
18 import org.apache.http.impl.client.DefaultHttpClient;
19 import org.apache.http.message.BasicNameValuePair;
20 import org.apache.http.params.BasicHttpParams;
21 import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;
22 import org.pizaini.mahasiswaonline.entities.Mahasiswa;
23 import android.util.Log;
24
25 public class ServerRequest {
26 private final static String TAG = "ServerRequest";
27 private final String serverUri = "http://10.0.2.2/android";
28 public static final String urlSelectAll = "select_all.php";
29 public static final String urlDelete = "delete_mahasiswa.php";
30 public static final String urlSubmit = "submit_mahasiswa.php";
31
32 public ServerRequest() {
33 super();
34 }
35
36 /** Mengirimkan GET request */
38 HttpClient httpClient;
40 InputStream is = null;
42 try {
44 HttpConnectionParams.setConnectionTimeout(params, 3000);
45 HttpConnectionParams.setSoTimeout(params, 3000);
47 Log.d(TAG, "executing...");
59 }
60 is.close();
61 }
62 } catch (Exception e) {
63 Log.d(TAG, e.getMessage());
64 }
65
66 return stringBuilder.toString();
67 }
68
69 /** Mengirimkan POST request */
70 public int sendPostRequest(Mahasiswa mahasiswa, String url){
71 int replyCode = 99;
72 HttpClient httpClient;
73 HttpPost post = new HttpPost(this.serverUri+"/"+url);
76 value.add(new BasicNameValuePair("id",
mahasiswa.getId().toString()));
77
value.add(new BasicNameValuePair("nim",
78 mahasiswa.getNim()));
79 value.add(new BasicNameValuePair("nama",
mahasiswa.getNama()));
80
value.add(new BasicNameValuePair("telp",
81
mahasiswa.getTelp()));
82
value.add(new BasicNameValuePair("alamat",
83 mahasiswa.getAlamat()));
84
85 try {
87 HttpConnectionParams.setConnectionTimeout(params,
3000);
88
HttpConnectionParams.setSoTimeout(params, 3000);
89
httpClient = new DefaultHttpClient(params);
90
post.setEntity(new UrlEncodedFormEntity(value));
91
Log.d(TAG, "executing post...");
92
HttpResponse httpResponse = httpClient.execute(post);
93
StatusLine status = httpResponse.getStatusLine();
94
if(status.getStatusCode() == HttpStatus.SC_OK){
95
Log.d(TAG, "submitted sucessfully...");
96
replyCode = status.getStatusCode();
97
}
98
} catch (IOException e) {
99
Log.d(TAG, e.getMessage());
100
}
return replyCode;
}
}
MainActivity akan kita gunakan untuk menampilkan ListView nama mahasiswa dan NIM. Seperti
berikut:
ListView
c. Ubah layout activity_main.xml
1 <RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
2
xmlns:tools="http://schemas.android.com/tools"
3
android:layout_width="match_parent"
4
android:layout_height="match_parent"
5
tools:context=".MainActivity" >
6
7
<ListView
8
android:id="@+id/listview_main"
9
android:layout_width="match_parent"
10
android:layout_height="wrap_content"
11
android:dividerHeight="1dp"
12
android:layout_margin="5dp" >
13 </ListView>
14
15 </RelativeLayout>
1 package org.pizaini.mahasiswaonline.entities;
2
3 import java.util.ArrayList;
4 import java.util.List;
5 import org.pizaini.mahasiswaonline.R;
6 import android.content.Context;
7 import android.view.LayoutInflater;
8 import android.view.View;
9 import android.view.ViewGroup;
10 import android.widget.BaseAdapter;
11 import android.widget.Filter;
12 import android.widget.Filterable;
13 import android.widget.TextView;
14
15 public class ListAdapterMahasiswa extends BaseAdapter implements Filterable{
18
19 public ListAdapterMahasiswa(Context context, List<Mahasiswa> list) {
20 this.context = context;
21 this.list = list;
22 this.filterd = this.list;
23 }
24
25 @Override
27 return filterd.size();
28 }
29
30 @Override
32 return filterd.get(position);
33 }
34
35 @Override
58 return filter;
59 }
60
61 /** Class filter untuk melakukan filter (pencarian) */
63
64 @Override
70 if(mhs.getNama().toLowerCase().contains(filterString) ||
mhs.getNim().toLowerCase().contains(filterString)){
71
filteredData.add(mhs);
72
}
73
}
74
result.count = filteredData.size();
75
result.values = filteredData;
76
return result;
77
}
78
79
@Override
80
protected void publishResults(CharSequence constraint, FilterResults results) {
81
filterd = (List<Mahasiswa>) results.values;
82
notifyDataSetChanged();
83
}
84
85
}
86
87 }
88
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.
1 ...
2
3 @Override
4 protected void onCreate(Bundle savedInstanceState) {
5 super.onCreate(savedInstanceState);
6 setContentView(R.layout.activity_main);
7 ...
8 ...
9
10 /** melakukan load data melalui AsyncTask */
11 new MainActivityAsync().execute("load");
12 }
13
14 ...
1 ...
2
3 private class MainActivityAsync extends AsyncTask<String, Void,
String>{
4
...
5
6
@Override
7
protected String doInBackground(String... params) {
8
...
9
/** Mengirimkan request ke server dan memproses JSON response
10 */
11 String response =
12 serverRequest.sendGetRequest(ServerRequest.urlSelectAll);
13 list = processResponse(response);
14 ...
15 }
16
17 ...
18 }
...
Response dari request ini adalah JSON (JavaScript Object Notation). Url yang
direquesthttp://10.0.2.2/android/select_all.php. Atau dapat dilihat melalui browser
localhosthttp://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.
1 ...
2
3 private List<Mahasiswa> processResponse(String response){
4 List<Mahasiswa> list = new ArrayList<Mahasiswa>();
5 try {
6 JSONObject jsonObj = new JSONObject(response);
7 JSONArray jsonArray = jsonObj.getJSONArray("mahasiswa");
8 Log.d(TAG, "data lengt: "+jsonArray.length());
9 Mahasiswa mhs = null;
13 mhs.setId(obj.getInt("id"));
14 mhs.setNim(obj.getString("nim"));
15 mhs.setNama(obj.getString("nama"));
16 mhs.setTelp(obj.getString("telp"));
17 mhs.setAlamat(obj.getString("alamat"));
18 list.add(mhs);
19 }
20 } catch (JSONException e) {
21 Log.d(TAG, e.getMessage());
22 }
23 return list;
24 }
25
26 ...
1 package org.pizaini.mahasiswaonline;
2
3 import java.util.ArrayList;
4 import java.util.List;
5 import org.json.JSONArray;
6 import org.json.JSONException;
7 import org.json.JSONObject;
8 import org.pizaini.mahasiswaonline.entities.ListAdapterMahasiswa;
9 import org.pizaini.mahasiswaonline.entities.Mahasiswa;
10 import org.pizaini.mahasiswaonline.server.ServerRequest;
11 import android.os.AsyncTask;
12 import android.os.Bundle;
13 import android.app.Activity;
14 import android.app.AlertDialog;
15 import android.app.ProgressDialog;
16 import android.app.SearchManager;
17 import android.content.Context;
18 import android.content.DialogInterface;
19 import android.content.Intent;
20 import android.util.Log;
21 import android.view.ActionMode;
22 import android.view.Menu;
23 import android.view.MenuItem;
24 import android.view.View;
25 import android.widget.AdapterView;
26 import android.widget.AdapterView.OnItemClickListener;
27 import android.widget.AdapterView.OnItemLongClickListener;
28 import android.widget.ListView;
29 import android.widget.SearchView;
import android.widget.Toast;
30
import android.widget.SearchView.OnQueryTextListener;
31
32
public class MainActivity extends Activity implements OnQueryTextListener{
33
private static final String TAG = "MainActivity";
34
private ListView listView;
35
private ActionMode actionMode;
36
private ActionMode.Callback amCallback;
37
38 private ProgressDialog progressDialog;
39 private ServerRequest serverRequest;
40 private List<Mahasiswa> list;
41 private ListAdapterMahasiswa adapter;
42 private Mahasiswa selectedList;
43
44 @Override
45 protected void onCreate(Bundle savedInstanceState) {
46 super.onCreate(savedInstanceState);
47 setContentView(R.layout.activity_main);
51
52 @Override
54 return false;
55 }
56
57 @Override
59 actionMode = null;
60 }
61
62 @Override
64 getMenuInflater().inflate(R.menu.activity_main_action, menu);
65 return true;
66 }
67
68 @Override
70 switch(item.getItemId()){
case R.id.action_menu_edit:
71
showUpdateForm();
72
break;
73
case R.id.action_menu_delete:
74
delete();
75
break;
76
}
77
mode.finish();
78
return false;
79 }
80 };
81 list = new ArrayList<Mahasiswa>();
82 /** melakukan load data melalui AsyncTask */
83 new MainActivityAsync().execute("load");
84 }
85
86 private void showUpdateForm(){
87 Intent in = new Intent(getApplicationContext(), FormMahasiswa.class);
88 in.putExtra("id", selectedList.getId().toString());
89 in.putExtra("nim", selectedList.getNim());
90 in.putExtra("nama", selectedList.getNama());
91 in.putExtra("telp", selectedList.getTelp());
92 in.putExtra("alamat", selectedList.getAlamat());
93 startActivity(in);
94 }
95
96 private void delete(){
99 builder.setTitle("Delete");
10 }
3 });
10 builder.setNegativeButton("No", new DialogInterface.OnClickListener() {
4
public void onClick(DialogInterface dialog, int which) {
10
5 dialog.cancel();
10 }
6
});
10
AlertDialog alert = builder.create();
7
alert.setIcon(android.R.drawable.ic_menu_delete);
10
8 alert.show();
10 }
9
@Override
11
0 public boolean onCreateOptionsMenu(Menu menu) {
11 getMenuInflater().inflate(R.menu.activity_main, menu);
1 SearchManager searchManager = (SearchManager)
11 getSystemService(Context.SEARCH_SERVICE);
2 SearchView searchView = (SearchView)
menu.findItem(R.id.option_menu_search).getActionView();
11
3 searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName(
)));
11
4 searchView.setIconifiedByDefault(false);
11 searchView.setOnQueryTextListener(this);
5
searchView.setQueryHint("nama atau nim");
11
6
return true;
11
7 }
11
8
@Override
11
9 public boolean onOptionsItemSelected(MenuItem item) {
12 switch(item.getItemId()){
0 case R.id.option_menu_new:
12 Intent in = new Intent(getApplicationContext(), FormMahasiswa.class);
1
startActivity(in);
12
2 break;
12 }
3 return super.onOptionsItemSelected(item);
12 }
4
12
5 private List<Mahasiswa> processResponse(String response){
12 List<Mahasiswa> list = new ArrayList<Mahasiswa>();
6
try {
12
JSONObject jsonObj = new JSONObject(response);
7
JSONArray jsonArray = jsonObj.getJSONArray("mahasiswa");
12
8 Log.d(TAG, "data lengt: "+jsonArray.length());
12 Mahasiswa mhs = null;
9
for(int i = 0; i < jsonArray.length(); i++){
13
0 JSONObject obj = jsonArray.getJSONObject(i);
13 mhs.setAlamat(obj.getString("alamat"));
4 list.add(mhs);
13 }
5
} catch (JSONException e) {
13
6 Log.d(TAG, e.getMessage());
13 }
7
13 return list;
8
}
13
9
private void populateListView(){
14
0 adapter = new ListAdapterMahasiswa(getApplicationContext(), list);
14 listView.setAdapter(adapter);
1
listView.setOnItemLongClickListener(new OnItemLongClickListener() {
14
2
14 @Override
3 public boolean onItemLongClick(AdapterView<?> adapterView, View v, int pos,
14 long id) {
4 if(actionMode != null){
14 return false;
5
}
14
6 actionMode = startActionMode(amCallback);
14 v.setSelected(true);
7 selectedList = (Mahasiswa) adapter.getItem(pos);
14 return true;
8
}
14
9
15 });
0
15
listView.setOnItemClickListener(new OnItemClickListener() {
1
15
2 @Override
15 public void onItemClick(AdapterView<?> adapterView, View v, int pos,
3
long id) {
15
4 selectedList = (Mahasiswa) adapter.getItem(pos);
15 in.putExtra("alamat", selectedList.getAlamat());
8 startActivity(in);
15 }
9
});
16
0 }
16
1
private class MainActivityAsync extends AsyncTask<String, Void, String>{
16
2
@Override
16
3 protected void onPreExecute() {
16 progressDialog = new ProgressDialog(MainActivity.this);
4
progressDialog.setMessage("retrieving...");
16
progressDialog.setIndeterminate(false);
5
progressDialog.setCancelable(false);
16
6 progressDialog.show();
16 }
7
16
8 @Override
17 list = processResponse(response);
3 }
17 return null;
4
}
17
5
17 @Override
6
protected void onPostExecute(String result) {
17
progressDialog.dismiss();
7
runOnUiThread(new Runnable() {
17
8 @Override
17 public void run() {
9
populateListView();
18
0 }
18 });
1 }
18
2
}
18
3
18 @Override
4 public boolean onQueryTextChange(String newText) {
18 adapter.getFilter().filter(newText);
5
return true;
18
6 }
18
7
@Override
18
public boolean onQueryTextSubmit(String query) {
8
18 return false;
9
}
19
0
}
19
1
19
2
19
3
19
4
19
5
19
6
19
7
19
8
19
9
20
0
20
1
20
2
20
3
20
4
20
5
20
6
20
7
20
8
20
9
21
0
21
1
21
2
21
3
21
4
21
5
21
6
21
7
21
8
21
9
22
0
22
1
22
2
22
3
22
4
22
5
22
6
22
7
22
8
22
9
23
0
23
1
23
2
23
3
23
4
23
5
23
6
23
7
23
8
23
9
24
0
24
1
24
2
24
3
24
4
24
5
24
6
1 <LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
2
xmlns:tools="http://schemas.android.com/tools"
3
android:layout_width="match_parent"
4
android:layout_height="match_parent"
5
android:orientation="vertical"
6
android:layout_margin="5dp"
7
tools:context=".FormMahasiswa" >
8
9
<TextView
10
android:id="@+id/textView1"
11
android:layout_width="wrap_content"
12
android:layout_height="wrap_content"
13
android:text="@string/tv_nim" />
14
15
<EditText
16
android:id="@+id/add_new_nim"
17
android:layout_width="match_parent"
18
android:layout_height="wrap_content"
19
android:hint="@string/hint_nim"
20
android:inputType="number"
21
android:layout_marginBottom="30dp"
22
android:ems="10" >
23
<requestFocus />
24
</EditText>
25
26 <TextView
27 android:id="@+id/textView2"
28 android:layout_width="wrap_content"
29 android:layout_height="wrap_content"
30 android:text="@string/tv_nama" />
31
32 <EditText
33 android:id="@+id/add_new_nama"
34 android:layout_width="match_parent"
35 android:layout_height="wrap_content"
36 android:hint="@string/hint_nama"
37 android:layout_marginBottom="30dp"
38 android:ems="10" />
39
40 <TextView
41 android:id="@+id/textView3"
42 android:layout_width="wrap_content"
43 android:layout_height="wrap_content"
44 android:text="@string/tv_telp" />
45
46 <EditText
47 android:id="@+id/add_new_telp"
48 android:layout_width="match_parent"
49 android:layout_height="wrap_content"
50 android:hint="@string/hint_telp"
51 android:inputType="textPhonetic"
52 android:layout_marginBottom="30dp"
53 android:ems="10" />
54
55 <TextView
56 android:id="@+id/textView4"
57 android:layout_width="wrap_content"
android:layout_height="wrap_content"
58
android:text="@string/tv_alamat" />
59
60
<EditText
61
android:id="@+id/add_new_alamat"
62
android:layout_width="match_parent"
63
android:layout_height="wrap_content"
64
android:ems="10"
65
android:minHeight="80dp"
66
android:hint="@string/hint_alamat"
67 android:inputType="textPostalAddress" />
68
69 </LinearLayout>
70
FormMahasiswa.java
Berikut adalah activity untuk menampilkan form Mahasiswa.
1 package org.pizaini.mahasiswaonline;
2
3 import org.apache.http.HttpStatus;
4 import org.pizaini.mahasiswaonline.entities.Mahasiswa;
5 import org.pizaini.mahasiswaonline.server.ServerRequest;
6
7 import android.os.AsyncTask;
8 import android.os.Bundle;
9 import android.app.ActionBar;
10 import android.app.Activity;
11 import android.app.ProgressDialog;
12 import android.content.Intent;
13 import android.view.Menu;
14 import android.view.MenuItem;
15 import android.widget.EditText;
16 import android.widget.Toast;
17
18 public class FormMahasiswa extends Activity {
24
25 @Override
27 super.onCreate(savedInstanceState);
28 setContentView(R.layout.activity_form_mahasiswa);
29 initView();
32 actionBar.setDisplayHomeAsUpEnabled(true);
mahasiswa = new Mahasiswa();
33
if(getIntent().hasExtra("id")){
34
String id = getIntent().getStringExtra("id");
35
String nim = getIntent().getStringExtra("nim");
36 String nama = getIntent().getStringExtra("nama");
37 String telp = getIntent().getStringExtra("telp");
38 String alamat = getIntent().getStringExtra("alamat");
39 textNim.setText(nim);
40 textNama.setText(nama);
41 textTelp.setText(telp);
42 textAlamat.setText(alamat);
43 mahasiswa.setId(Integer.valueOf(id));
44 }else{
45 mahasiswa.setId(0);
46 }
47 }
48
49 private void initView(){
54 }
55
56 @Override
58 getMenuInflater().inflate(R.menu.form_mahasiswa, menu);
59 return true;
60 }
61
62 private void goToMainActivity(){
64 in.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
65 startActivity(in);
66 }
67
@Override
68
public boolean onOptionsItemSelected(MenuItem item) {
69
switch(item.getItemId()){
70
case android.R.id.home:
71
goToMainActivity();
72
break;
73
74
case R.id.option_menu_save:
75
if(textNim.getText().toString().trim().isEmpty() ||
76
textNama.getText().toString().trim().isEmpty()){
77 Toast.makeText(getApplicationContext(), "NIM dan Nama tidak boleh kosong",
Toast.LENGTH_SHORT).show();
78
}else{
79
new FormMahasiswaAsync().execute();
80
}
81
break;
82
}
83
return super.onOptionsItemSelected(item);
84
}
85
86
private void sendRequest(){
87
String nim = textNim.getText().toString();
88
String nama = textNama.getText().toString();
89
String telp = textTelp.getText().toString();
90
String alamat = textAlamat.getText().toString();
91
mahasiswa.setNim(nim);
92
mahasiswa.setNama(nama);
93
mahasiswa.setTelp(telp);
94
mahasiswa.setAlamat(alamat);
95
96
/**Mengirimkan POST reques*/
97
98
replyCode = server.sendPostRequest(mahasiswa, ServerRequest.urlSubmit);
99
}
100
101
private class FormMahasiswaAsync extends AsyncTask<String, String, String>{
102
@Override
103
protected void onPreExecute() {
104
progressDialog = new ProgressDialog(FormMahasiswa.this);
105
progressDialog.setMessage("saving data...");
106
progressDialog.setIndeterminate(false);
107
progressDialog.setCancelable(false);
108
progressDialog.show();
109
}
110
@Override
111
protected String doInBackground(String... params) {
112
sendRequest();
113
return null;
114
}
115
@Override
116
protected void onPostExecute(String result) {
117 progressDialog.dismiss();
118 if(replyCode == HttpStatus.SC_OK){
119 goToMainActivity();
120 }else{
121 Toast.makeText(getApplicationContext(), "save data problem",
Toast.LENGTH_SHORT).show();
122
}
123
}
124
125
}
126
127
}
128
1 </p>
2 <LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
3
xmlns:tools="http://schemas.android.com/tools"
4
android:layout_width="match_parent"
5
android:layout_height="match_parent"
6
android:orientation="vertical"
7
android:layout_margin="5dp"
8
tools:context=".DetailMahasiswa" >
9
10
<TextView
11
android:id="@+id/textView1"
12
android:layout_width="wrap_content"
13
android:layout_height="wrap_content"
14
android:text="@string/tv_nim" />
15
16
<EditText
17
android:id="@+id/add_new_nim"
18
android:layout_width="match_parent"
19
android:layout_height="wrap_content"
20
android:hint="@string/hint_nim"
21
android:enabled="false"
22
android:layout_marginBottom="30dp"
23
android:ems="10" >
24
<requestFocus />
25
</EditText>
26
27 <TextView
28 android:id="@+id/textView2"
29 android:layout_width="wrap_content"
30 android:layout_height="wrap_content"
31 android:text="@string/tv_nama" />
32
33 <EditText
34 android:id="@+id/add_new_nama"
35 android:layout_width="match_parent"
36 android:layout_height="wrap_content"
37 android:hint="@string/hint_nama"
38 android:enabled="false"
39 android:layout_marginBottom="30dp"
40 android:ems="10" />
41
42 <TextView
43 android:id="@+id/textView3"
44 android:layout_width="wrap_content"
45 android:layout_height="wrap_content"
46 android:text="@string/tv_telp" />
47
48 <EditText
49 android:id="@+id/add_new_telp"
50 android:layout_width="match_parent"
51 android:layout_height="wrap_content"
52 android:hint="@string/hint_telp"
53 android:layout_marginBottom="30dp"
54 android:enabled="false"
55 android:ems="10" />
56
57 <TextView
58 android:id="@+id/textView4"
android:layout_width="wrap_content"
59
android:layout_height="wrap_content"
60
android:text="@string/tv_alamat" />
61
62
<EditText
63
android:id="@+id/add_new_alamat"
64
android:layout_width="match_parent"
65
android:layout_height="wrap_content"
66
android:ems="10"
67 android:minHeight="80dp"
68 android:enabled="false"
69 android:hint="@string/hint_alamat"
70 android:inputType="textPostalAddress" />
71
72 </LinearLayout>
73
1 package org.pizaini.mahasiswaonline;
2
3 import org.pizaini.mahasiswaonline.entities.Mahasiswa;
4 import org.pizaini.mahasiswaonline.server.ServerRequest;
5 import android.os.AsyncTask;
6 import android.os.Bundle;
7 import android.app.ActionBar;
8 import android.app.Activity;
9 import android.app.AlertDialog;
10 import android.content.DialogInterface;
11 import android.content.Intent;
12 import android.view.Menu;
13 import android.view.MenuItem;
14 import android.widget.EditText;
15 import android.widget.Toast;
16
17 public class DetailMahasiswa extends Activity {
21
22 @Override
24 super.onCreate(savedInstanceState);
25 setContentView(R.layout.activity_detail_mahasiswa);
28 initView();
30 actionBar.setDisplayHomeAsUpEnabled(true);
31 }
32
33 private void initView(){
34 textNim = (EditText) findViewById(R.id.add_new_nim);
35 textNama = (EditText) findViewById(R.id.add_new_nama);
36 textTelp = (EditText) findViewById(R.id.add_new_telp);
37 textAlamat = (EditText) findViewById(R.id.add_new_alamat);
38
39 String id = getIntent().getStringExtra("id");
40 String nim = getIntent().getStringExtra("nim");
41 String nama = getIntent().getStringExtra("nama");
42 String telp = getIntent().getStringExtra("telp");
44
45 textNim.setText(nim);
46 textNama.setText(nama);
47 textTelp.setText(telp);
48 textAlamat.setText(alamat);
49
50 mahasiswa.setId(Integer.valueOf(id));
51 mahasiswa.setNim(nim);
52 mahasiswa.setNama(nama);
53 mahasiswa.setTelp(telp);
54 mahasiswa.setAlamat(alamat);
55 }
56
57 @Override
59 getMenuInflater().inflate(R.menu.activity_main_action, menu);
60 return true;
61 }
62
63 @Override
65 switch(item.getItemId()){
case android.R.id.home:
66
goToMainActivity();
67
break;
68
69
case R.id.action_menu_edit:
70
Intent in = new Intent(getApplicationContext(), FormMahasiswa.class);
71
in.putExtra("id", mahasiswa.getId().toString());
72
in.putExtra("nim", mahasiswa.getNim());
73
in.putExtra("nama", mahasiswa.getNama());
74 in.putExtra("telp", mahasiswa.getTelp());
75 in.putExtra("alamat", mahasiswa.getAlamat());
76 startActivity(in);
77 break;
78
79 case R.id.action_menu_delete:
80 delete();
81 break;
82 }
83 return super.onOptionsItemSelected(item);
84 }
85
86 private void goToMainActivity(){
88 in.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
89 startActivity(in);
90 }
91
92 private void delete(){
95 builder.setTitle("Delete");
98 new DetailMahasiswaAsync().execute();
99 Toast.makeText(getApplicationContext(), "deleted",
Toast.LENGTH_SHORT).show();
10
0 }
10 });
1 builder.setNegativeButton("No", new DialogInterface.OnClickListener() {
10 public void onClick(DialogInterface dialog, int which) {
2
dialog.cancel();
10
3 }
10 });
4 AlertDialog alert = builder.create();
10 alert.setIcon(android.R.drawable.ic_menu_delete);
5
alert.show();
10
6 }
10 private class DetailMahasiswaAsync extends AsyncTask<String, String, String>{
7
10
@Override
8
protected String doInBackground(String... params) {
10
9 server.sendGetRequest(ServerRequest.urlDelete+"?id="+mahasiswa.getId().toStri
ng());
11
0 return null;
11 }
1
11
@Override
2
protected void onPostExecute(String result) {
11
3 Intent in = new Intent(getApplicationContext(), MainActivity.class);
11 in.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
4
startActivity(in);
11
5 }
11
6 }
11
7
}
11
8
11
9
12
0
12
1
12
2
12
3
12
4
12
5
12
6
12
7
12
8
12
9
i. Menambahkan Permission
Tambahkan permission ada AndroidManifest.xml
1 <uses-permission
android:name="android.permission.INTERNET" />
Form Mahasiswa
Detail Mahasiswa