Uts Pbo2
Uts Pbo2
:
:
:
:
Dalam UTS kali ini Anda diharapkan memahami tentang struktur code pemrograman pada Android.
mengimplementasi fungsi/method yang belum lengkap, mengetahui keterkaitan dan arsitektur pemrograman
mobile. Sampai pada tiap tahap-tahap menjalankan program Project Android sederhana.
1. Buat Project Android baru dengan nama Kamus.
2. Buat Class baru dengan nama DatabaseHelper.java ketik script dibawah ini.
package com.example.kamus;
public class DatabaseHelper extends SQLiteOpenHelper {
public DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, 1);
// TODO Auto-generated constructor stub
}
private static final String DATABASE_NAME = "dbkamus";
public static final String INGGRIS= "inggris";
public static final String INDONESIA = "indonesia";
public static final String JERMAN = "JERMAN";
//Constructor DataKamus untuk initiate database
public void createTable(SQLiteDatabase db){
db.execSQL("DROP TABLE IF EXISTS kamus");
db.execSQL("CREATE TABLE if not exists kamus (_id INTEGER
PRIMARY KEY AUTOINCREMENT, " + "inggris TEXT, indonesia TEXT, jerman
TEXT);");
}
public void generateData(SQLiteDatabase db){
ContentValues cv=new ContentValues();
cv.put(INGGRIS, "run");
cv.put(INDONESIA, "lari");
cv.put(JERMAN, "laufen");
db.insert("kamus", INGGRIS, cv);
cv.put(INGGRIS, "walk");
cv.put(INDONESIA, "jalan");
cv.put(JERMAN, "gehen");
db.insert("kamus", INDONESIA, cv);
cv.put(INGGRIS, "read");
cv.put(INDONESIA, "membaca");
cv.put(JERMAN, "lesen");
db.insert("kamus", JERMAN, cv);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int
newVersion) {
// TODO Auto-generated method stub
createTable(db);
generateData(db);
}
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
//Toast.makeText(getBaseContext(), "Oncreate",
Toast.LENGTH_SHORT).show();
createTable(db);
generateData(db);
Pada class inilah database dibuat dengan nama dbkamus, disini table juga dibuat dengan nama kamus
dan diisikan dengan beberapa data.
3. Edit file activity_main.xml dengan drag and drop agar menampilkan struktur layout seperti di bawah ini
Note: menggunakan Linear Layout.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:editable="false"
android:text=""
7. TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Jerman"
8. EditText
android:id="@+id/txtJerman"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
~
9. Buat Class baru dengan nama DaftarKata.java lalu ketikkan kode berikut. Perbaiki error nya.
package com.example.kamus;
import android.app.Activity;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.TextView;
public class DaftarKata extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
dbhelper = new DatabaseHelper(this);
setContentView(R.layout.daftarkata);
listContent = (ListView) findViewById(R.id.list1);
isDataListView();
}
private void isDataListView() {
try {
db = dbhelper.getWritableDatabase();
kamusCursor = db.query("kamus", new String[] { "_id", "inggris",
"indonesia", "jerman" }, "_id>0", null, null, null, null);
// startManagingCursor( jasaCursor);
/* * Create an array to specify the fields we want to display in
the * list (only the 'inggris,indonesia,jerman' column in this case) */
String[] from = new String[] { "inggris", "indonesia", "jerman" };
/* * and an array of the fields we want to bind those fieiplds to
(in * this case just the textView 'inggris,indonesia,jerman' from our new row.xml *
layout above) */
int[] to = new int[] {
R.id.inggris, R.id.indonesia, R.id.jerman };
/* Now create a simple cursor adapter.. */
adapter = new CustomCursorAdapter(this, R.layout.row, kamusCursor,
from, to);
// listView.setAdapter(adapter);
listContent.setAdapter(adapter);
}
catch (Exception e) {
e.printStackTrace(); }
finally {
if (db != null && db.isOpen()) {
db.close(); }
}
}
@Override
public void onDestroy() {
super.onDestroy();
try { kamusCursor.close();
}
catch (Exception e) {
}
}
18. Caranya,,,? buat Class baru dengan nama MenuActivity.java lalu ketikkan kode berikut.
Masih ada error, perbaiki.
package com.example.kamus;
public class MenuActivity extends ListActivity {
String[] menuutama = new String[] { "Terjemah Kata", "Tambah Kata", "Daftar
Kata", "Keluar Aplikasi" };
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
// Menset nilai array ke dalam list adapater sehingga data pada array
// akan dimunculkan dalam list
this.setListAdapter(new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, menuutama));
}
@Override
/**method ini akan mengoveride method onListItemClick yang ada pada class List
Activity
* * method ini akan d1ipanggil apabilai ada salah satu item dari list menu
yang dipilih */
protected void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
// Menangkap nilai text yang dklik
Object o = this.getListAdapter().getItem(position);
String pilihan = o.toString();
// Menampilkan hasil pilihan menu dalam bentuk Toast
tampilkanPilihan(pilihan);
}
protected void tampilkanPilihan(String pilihan) {
try {
//Intent digunakan untuk sebagai pengenal suatu activity
Intent i = null;
if (pilihan.equals("Terjemah Kata"))
{
i = new Intent(this,MainActivity.class);
}
else if (pilihan.equals("Tambah Kata")) {
i = new Intent(this, TambahKata.class);
}
else if (pilihan.equals("Daftar Kata")) {
i = new Intent(this, DaftarKata.class);
}
else if (pilihan.equals("Keluar Aplikasi")) {
finish();
}
else {
Toast.makeText(this,"Anda Memilih: " + pilihan + " ,
Actionnya belum dibuat", Toast.LENGTH_LONG).show();
}
startActivity(i);
}
catch (Exception e) {
e.printStackTrace();
}
}
}
21. Sekarang kita melangkah ke bagian Ubah data dan Hapus data.
Pasti kita memikirkan bagaiman cara menempatkan Edit dan Hapus ini.
Aha kita letakan saja di DaftarKata. Jadi ketika satu baris kata di klik lama (long click) akan
memunculkan menu edit dan hapus. Sampai disini paham?
22. Buka file String.xml pada direktori res/value ketikan kode berikut
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Kamus</string>
<string name="action_settings">Settings</string>
<string name="hello_world">Hello world!</string>
<string name="ok">OK</string>
<string name="save">Simpan</string>
<string name="cancel">Cancel</string>
<string name="add_title">Edit Kamus</string>
<string name="delete_title">Hapus Kamus, Anda yakin ?</string>
</resources>
Pastikan versi xml dan encoding tepat. Dan menggunakan Linear Layout
layout_width="fill_parent"
layout_height="fill_parent"
orientation="vertical"
6. <EditText
id="@+id/jerman"
layout_width="fill_parent"
layout_height="wrap_content" >
</EditText>
</LinearLayout>
24. Buka kembali file DaftarKata.java lalu edit dengan kode berikut
package com.example.kamus;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.ContentValues;
import android.content.Context;
import android.content.DialogInterface;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.TextView;
public class DaftarKata extends Activity {
private DatabaseHelper dbhelper;
private SQLiteDatabase db = null;
private ListView listContent = null;
private static final int EDIT_ID = Menu.FIRST + 1;
private static final int DELETE_ID = Menu.FIRST + 2;
private Cursor kamusCursor = null;
CustomCursorAdapter adapter;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
dbhelper = new DatabaseHelper(this);
setContentView(R.layout.daftarkata);
listContent = (ListView) findViewById(R.id.list1);
isDataListView();
registerForContextMenu(listContent);
}
private void isDataListView() {
try {
db = dbhelper.getWritableDatabase();
kamusCursor = db.query("kamus", new String[] { "_id", "inggris",
"indonesia", "jerman" }, "_id>0", null, null, null, null);
/* * Create an array to specify the fields we want to display in the
* list (only the 'inggris,indonesia,jerman' column in this case) */
String[] from = new String[] { "inggris", "indonesia", "jerman" };
/* * and an array of the fields we want to bind those fieiplds to (in
* this case just the textView 'inggris,indonesia,jerman' from our * new row.xml layout
above) */
int[] to = new int[] { R.id.inggris, R.id.indonesia, R.id.jerman };
/* Now create a simple cursor adapter.. */
adapter = new CustomCursorAdapter(this, R.layout.row, kamusCursor,
from, to);
// listView.setAdapter(adapter);
listContent.setAdapter(adapter);
}
catch (Exception e) {
e.printStackTrace();
}
finally {if (db != null && db.isOpen()) {
// db.close();
}
}
}
@Override
public void onDestroy() {
super.onDestroy();
try { kamusCursor.close();
}
catch (Exception e) {
}
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenu.ContextMenuInfo menuInfo) {
menu.add(Menu.NONE, DELETE_ID, Menu.NONE, "`Hapus")
.setIcon(R.drawable.ic_launcher).setAlphabeticShortcut('e');
menu.add(Menu.NONE, EDIT_ID, Menu.NONE, "Edit")
.setIcon(R.drawable.ic_launcher).setAlphabeticShortcut('d');
}
@Override
public boolean onContextItemSelected(MenuItem item) {
switch (item.getItemId()) {
case DELETE_ID: AdapterView.AdapterContextMenuInfo info =
(AdapterView.AdapterContextMenuInfo) item .getMenuInfo();
delete(info.id);
return (true);
case EDIT_ID: AdapterView.AdapterContextMenuInfo infox =
(AdapterView.AdapterContextMenuInfo) item .getMenuInfo();
Cursor ckamusCursor = db.rawQuery( "SELECT _ID, inggris, indonesia, jerman
" + "FROM kamus where _ID=" + infox.id, null);
ckamusCursor.moveToFirst();
edit(infox.id, ckamusCursor.getString(1), ckamusCursor.getString(2),
ckamusCursor.getString(3));
return (true);
}
return (super.onOptionsItemSelected(item));
}
private void edit(long id, String pinggris, String pindonesia, String pjerman) {
LayoutInflater inflater = LayoutInflater.from(this);
View addView = inflater.inflate(R.layout.edit, null);
EditText edinggris = (EditText) addView.findViewById(R.id.inggris);
EditText edindonesia = (EditText) addView.findViewById(R.id.indonesia);
EditText edjerman = (EditText) addView.findViewById(R.id.jerman);
edinggris.setText(pinggris);
edindonesia.setText(pindonesia);
edjerman.setText(pjerman);
final DialogWrapper wrapper = new DialogWrapper(addView);
final long xid = id;
/* * wrapper.inggrisField.setText(pinggris);
* * wrapper.indonesiaField.setTag(pindonesia) */
new AlertDialog.Builder(this) .setTitle(R.string.add_title)
.setView(addView)
.setPositiveButton(R.string.save, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton)
{ processEdit(wrapper, xid);
}
})
.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton)
{
// ignore, just dismiss
}
}
).show();
}
private void delete(final long rowId) {
if (rowId > 0) {
new AlertDialog.Builder(this)
.setTitle(R.string.delete_title)
.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener()
{
25. Run Programnya. Jika sukses, SELAMAT. Anda mendapat nilai UTS 100.