BAB 7
134
7.1
Tujuan Pembelajaran
1.
Memahami macam penyimpanan data pada Android
2.
Memahami cara menulis dan membaca file dari penyimpanan internal dan eksternal
3.
Memahami penggunaan database SQLite
7.2
Dasar Teori
Android menyediakan 4 mekanisme dalam menyimpan dan mendapatkan kembali
data, yaitu :
1.
Preferences,
2.
Files,
3.
Database, and
4.
Network.
Dalam Android, semua data aplikasi ( termasuk file) private terhadap aplikasi itu
sendiri. Android juga menyediakan cara untuk sebuah aplikasi untuk menampilkan data
privatenya ke aplikasi lain menggunakan content Providers. Android menyiapkan
beberapa content providers untuk tipe data standar, seperti image, audio, video files dan
personal contact information.
7.2.1
Preferences
Preferences adalah mekanisme yang mudah dalam android untuk menyimpan
dan mendapatkan kembali pasangan key-value dari tipe data primitive(disebut juga
dengan Maps dan Associative Arrays)
Biasanya digunakan untuk menyimpan state informasi dan data bersama
diantara beberapa activity dalam aplikasi. Dalam setiap entry <key-value> key
adalah string dan value harus berupa tipe data primitive. Preferences hampir sama
dengan Bundles, namun preferences bersifat persisten sedangkan bundles tidak.
135
•
getPreferences() from within your Activity, to access activity specific
preferences
•
getSharedPreferences() from within your Activity (or other application
Context), to access application-level preferences
•
getDefaultSharedPreferences(), on PreferencesManager, to get the shared
preferences that work in concert with Android’s overall preference framework
Penggunaan Preference
Semua fungsi
get… yang ada pada Preference akan mengembalikan sebuah
object dimana isi dari object tersebut dapat dimanipulasi oleh suatu
editor melalui
perintah
putXXX…
dan
getXXX untuk meletakkan atau mengambil data container
[image:3.595.170.478.391.532.2]Preference.
Gambar 50 Penggunaan Preference
7.2.2 Files
Android menggunakan konstruksi file yang sama dengan apa yang ada pada
aplikasi Java. File dapat disimpan pada memori utama perangkat (internal storage)
atau pada memori yang lebih besar seperti SD Card (external storage). File juga
136
File disimpan dalam media penyimpanan perangkat bersama-sama dengan
sumber daya aplikasi lain (seperti ikon, gambar, music, dll) yang dinamakan
resource files.
7.2.3
Databases
Pengenalan
Android menggunakan program tertanam standalone yang dinamakan
sqlite3, yang dapat digunakan untuk :
•
create a database,
•
define SQL tables,
•
indices,
•
queries,
•
views,
•
triggers
•
Insert rows,
•
delete rows,
•
change rows,
•
run queries dan
•
administer a SQLite database file.
Menggunakan SQLite
1.
SQLite mengimplementasikan standar SQL-92.
2.
Memiliki dukungan trigger dan dapat melakukan query yang cukup
kompleks
3.
Tidak mendukung referential integrity constraints.
Bagaimana membuat database SQLite
137
public static SQLiteDatabase.openDatabase ( String path, SQLiteDatabase.CursorFactory factory, int flags )Parameters
path : to database file to open and/or create
factory : an optional factory class that is called to instantiate a cursor when query is
called, or null for default
flags : to control database access mode
Returns : the newly opened database
Throws : SQLiteException if the database cannot be opened
Open
the
database
according
to
the
flags
OPEN_READWRITE,
OPEN_READONLY, CREATE_IF_NECESSARY. Sets the locale of the database
to the the system's current locale.
Cara kedua :
SQLiteDatabase db = this.openOrCreateDatabase("myfriendsDB", MODE_PRIVATE, null);
where the assumed prefix for the database stored in the devices ram is:
"/data/data/<CURRENT_namespace>/databases/". For instance if this app is created
in a namespace called “cis493.sql1”, the full name of the newly created database
162
Workshop 11
Databases
A.
Tujuan
1.
Memahami pengertian SQL Database
2.
Memahami penggunaan SQL Database
B.
Tugas Pendahuluan
1.
Pelajari cara pembuatan database di Android
C.
Percobaan
a.
Percobaan 1 : Membuat table dan insert field pada Android
Langkah 1: Buat project Android baru pada Eclipse
Langkah 2: Tambahkan statement berikut pada main.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/txtFinish"
android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:text="@string/hello" />
163
android:id="@+id/txtMulai"android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/txtFinish" android:layout_below="@+id/txtFinish" android:layout_marginTop="48dp" android:text="@string/hello" />
</RelativeLayout>
Langkah 3 : Lengkapi statement berikut pada class java MainActivity
package com.data;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
public class DBAdapter {
public static final String KEY_ROWID = "_id";
public static final String KEY_ISEBN = "isbn";
public static final String KEY_TITLE = "title";
public static final String KEY_PUBLISHER ="publisher";
public static final String TAG = "DBAdapter";
private static final String DATABASE_NAME ="books";
private static final String DATABASE_TABLE ="titles";
private static final int DATABASE_VERSION = 1;
private static final String DATABASE_CREATE =
" create table titles (_id integer primary key autoincrement, "+ "isbn text not null, title text not null,"
+ "publisher text not null);";
private final Context context;
private DatabaseHelper DBHelper;
private SQLiteDatabase db;
164
this.context = ctx;DBHelper = new DatabaseHelper(context);
}
private static class DatabaseHelper extends SQLiteOpenHelper {
DatabaseHelper(Context context){
super(context, DATABASE_NAME, null , DATABASE_VERSION);
}
public void onCreate(SQLiteDatabase db){
db.execSQL(DATABASE_CREATE);
}
public void onUpgrade(SQLiteDatabase db,int oldVersion, int
newVersion){
Log.w(TAG, "Upgrading database from version" + oldVersion + "to"
+ newVersion +", which will destroy all old data");
db.execSQL("Drop table if exist titles");
onCreate(db);
}
}
public DBAdapter open() throws SQLException { db = DBHelper.getWritableDatabase(); return this;
}
public void close() {
DBHelper.close(); }
public long insertTitle(String isbn, String title, String publisher){
ContentValues initialValues = new ContentValues(); initialValues.put(KEY_ISEBN, isbn);
initialValues.put(KEY_TITLE, title);
initialValues.put(KEY_PUBLISHER, publisher);
return db.insert(DATABASE_TABLE, null, initialValues); }
165
public boolean delete(long rowid){
return db.delete(DATABASE_TABLE, KEY_ROWID + "=" +rowid,
null) >0; }
public Cursor getAllTitles(){
return db.query(DATABASE_TABLE, new String[]{
KEY_ROWID,
KEY_ISEBN,
KEY_TITLE,
KEY_PUBLISHER},
null, null,null, null, null);
}
public Cursor getTitle(long rowId) throws SQLException{
Cursor mCursor =
db.query(true, DATABASE_TABLE, new String[]{
KEY_ROWID,
KEY_ISEBN,
KEY_TITLE,
KEY_PUBLISHER},
KEY_ROWID + "="+ rowId, null, null,null, null, null);
if (mCursor != null){
mCursor.moveToFirst();
}return mCursor; }
public boolean updateTitle(long rowId, String isbn, String title, String publisher){
ContentValues args = new ContentValues(); args.put(KEY_ISEBN, isbn);
args.put(KEY_TITLE, title);
args.put(KEY_PUBLISHER, publisher);
return db.update(DATABASE_TABLE, args, KEY_ROWID + "=" + rowId, null)>0;
166
Langkah 4 : Lakukan editing pada kode yang dicetak tebal berikut pada class
AndroidManifest.xml:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.data"
android:versionCode="1" android:versionName="1.0" >
<uses-sdk android:minSdkVersion="10" />
<application
android:icon="@drawable/ic_launcher" android:label="@string/app_name" >
<activity
android:name=".DatabaseBukuActivity" android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category
android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application> </manifest>
Langkah 5 : Tekan F11 untuk mendebug aplikasi pada emulator Android
168
b.
Percobaan 2 : Membuat database dengan SQLHelper
Langkah 1: Buat project Android baru pada Eclipse
Langkah 2: Tambahkan statement berikut pada main.xml
<?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" >
<LinearLayout
android:id="@+id/LinearLayout02" android:layout_width="wrap_content" android:layout_height="wrap_content" >
<TextView
android:id="@+id/TextView01"
android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="number " >
</TextView>
<EditText
android:id="@+id/editText_num" android:layout_width="wrap_content" android:layout_height="wrap_content" android:phoneNumber="true" >
</EditText>
</LinearLayout>
<LinearLayout
android:id="@+id/LinearLayout03" android:layout_width="wrap_content" android:layout_height="wrap_content" >
<TextView
android:id="@+id/TextView02"
android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="name " >
169
<EditTextandroid:id="@+id/editText_name" android:layout_width="wrap_content" android:layout_height="wrap_content" >
</EditText>
</LinearLayout>
<LinearLayout
android:id="@+id/LinearLayout01" android:layout_width="wrap_content" android:layout_height="wrap_content" >
<Button
android:id="@+id/but_in"
android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="but_inClick"
android:text="Add" >
</Button>
<Button
android:id="@+id/but_Edit"
android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="but_EditClick" android:text="Edit" >
</Button>
<Button
android:id="@+id/but_delete"
android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="but_DelClick" android:text="Delete" >
</Button>
</LinearLayout>
<TextView
android:id="@+id/TextView03"
android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="DATA" >
</TextView>
170
android:id="@+id/ListView01"android:layout_width="wrap_content" android:layout_height="wrap_content" >
</ListView> </LinearLayout>
Langkah 3 : Buatlah sebuah class xml lagi, beri nama view2.xml
<?xml version="1.0" encoding="utf-8"?> <TableLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/TableLayout01"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<TextView
android:id="@+id/name"
android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="myName" >
</TextView>
<TextView
android:id="@+id/number"
android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="myNumber" >
</TextView>
</TableLayout>
Langkah 4 : Lengkapi statement berikut pada class java MainActivity
import android.app.Activity;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.EditText;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
171
public class usingSQLHelper extends Activity { mySqlHelper dbHelper;
private EditText ed_num;
private EditText ed_name; protected Cursor cursor;
private int id=-1;
protected ListAdapter adapter; protected ListView numberList;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
setContentView(R.layout.main);
this.ed_num = (EditText)
this.findViewById(R.id.editText_num);
this.ed_name = (EditText)
this.findViewById(R.id.editText_name);
this.numberList = (ListView)
this.findViewById(R.id.ListView01); dbHelper = new mySqlHelper(this); numberList.setSelected(true);
numberList.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
SQLiteDatabase db =
dbHelper.getReadableDatabase();
cursor = db.rawQuery("SELECT * FROM data",null);
cursor.moveToPosition(arg2);
ed_num.setText(cursor.getString(1)); ed_name.setText(cursor.getString(2)); id=cursor.getInt(0);
}});
view(); }
private void addData(String num,String name) {
SQLiteDatabase db = dbHelper.getWritableDatabase(); try{
db.execSQL("insert into "+ mySqlHelper.TABLE +" values(null,'"+num+"','"+name+"')");
}
172
ed_num.setText(e.toString());} }
public void but_inClick(View v) {
addData(ed_num.getText().toString(),ed_name.getText().toString()); view();
}
public void but_DelClick(View v) {
SQLiteDatabase db = dbHelper.getWritableDatabase(); try{
if(id!=-1)
{
db.execSQL("delete from "+ mySqlHelper.TABLE +" where number='" +ed_num.getText().toString()+ "'");
view();
}
}
catch(Exception e) {
ed_num.setText(e.toString()); }
}
public void but_EditClick(View v) {
SQLiteDatabase db = dbHelper.getWritableDatabase(); try{
if(id!=-1)
{
db.execSQL("update data set
number='"+ed_num.getText().toString()+"',name='"+ed_name.getText().to String()+"' where _id="+id);
view();
}
}
catch(Exception e) {
ed_num.setText(e.toString()); }
}
private void view() {
173
try{cursor = db.rawQuery("SELECT * FROM data",null); adapter = new SimpleCursorAdapter(
this,
R.layout.view2,
cursor,
new String[] {"number","name"}, new int[] {R.id.number,R.id.name});
numberList.setAdapter(adapter);} catch(Exception e)
{
ed_num.setText(e.toString()); }
}
}
Langkah 5 : Kemudian, buatlah sebuah class java baru, beri nama
mySqlHelper.java
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
public class mySqlHelper extends SQLiteOpenHelper{
private static final String DATABASE_NAME = "mydatabase.db";
private static final int DATABASE_VERSION = 1;
// Table name
public static final String TABLE = "data"; // Columns
public static final String number = "number";
public static final String name = "name";
public mySqlHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION); // TODO Auto-generated constructor stub
}
@Override
public void onCreate(SQLiteDatabase db) {
174
+ " integer primary key autoincrement, " + number + " text not null, "+ name + " text not null);"; Log.d("Data", "onCreate: " + sql); db.execSQL(sql);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int
newVersion) {
// TODO Auto-generated method stub }
}
Lakukan editing pada kode yang dicetak tebal berikut pada class
AndroidManifest.xml:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.data"
android:versionCode="1" android:versionName="1.0" >
<uses-sdk android:minSdkVersion="10" />
<application
android:icon="@drawable/ic_launcher" android:label="@string/app_name" >
<activity
android:name=".DatabaseBukuActivity" android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category
android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application> </manifest>
Langkah 6 :Tekan F11 untuk mendebug aplikasi pada emulator Android
175
c.
Percobaan 3 : Membuat database dengan ContentService
Langkah 1: Buat project Android baru pada Eclipse
Langkah 2: Tambahkan statement berikut pada main.xml
<?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" >
<LinearLayout
android:id="@+id/LinearLayout02" android:layout_width="wrap_content" android:layout_height="wrap_content" >
<TextView
android:id="@+id/TextView01"
176
android:text="number " ></TextView>
<EditText
android:id="@+id/editText_num" android:layout_width="wrap_content" android:layout_height="wrap_content" android:phoneNumber="true" >
</EditText>
</LinearLayout>
<LinearLayout
android:id="@+id/LinearLayout03" android:layout_width="wrap_content" android:layout_height="wrap_content" >
<TextView
android:id="@+id/TextView02"
android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="name " >
</TextView>
<EditText
android:id="@+id/editText_name" android:layout_width="wrap_content" android:layout_height="wrap_content" >
</EditText>
</LinearLayout>
<LinearLayout
android:id="@+id/LinearLayout01" android:layout_width="wrap_content" android:layout_height="wrap_content" >
<Button
android:id="@+id/but_in"
android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="but_inClick"
android:text="Add" >
</Button>
<Button
177
android:layout_width="wrap_content"android:layout_height="wrap_content" android:onClick="but_EditClick" android:text="Edit" >
</Button>
<Button
android:id="@+id/but_delete"
android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="but_DelClick" android:text="Delete" >
</Button>
</LinearLayout>
<TextView
android:id="@+id/TextView03"
android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="DATA" >
</TextView>
<ListView
android:id="@+id/ListView01"
android:layout_width="wrap_content" android:layout_height="wrap_content" >
</ListView> </LinearLayout>
Langkah 3 : Buatlah sebuah class xml lagi, beri nama view2.xml
<?xml version="1.0" encoding="utf-8"?> <TableLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/TableLayout01"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<TextView
android:id="@+id/name"
android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="myName" >
178
<TextViewandroid:id="@+id/number"
android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="myNumber" >
</TextView>
</TableLayout>
Langkah 4 : Lengkapi statement berikut pada class java MainActivity
import android.app.Activity;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.EditText;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.AdapterView.OnItemClickListener;
public class usingContentValues extends Activity { mySqlHelper dbHelper;
private EditText ed_num;
private EditText ed_name;
private int id=-1;
protected Cursor cursor; protected ListAdapter adapter; protected ListView numberList;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
setContentView(R.layout.main);
this.ed_num = (EditText)
this.findViewById(R.id.editText_num);
this.ed_name = (EditText)
this.findViewById(R.id.editText_name);
this.numberList = (ListView)
this.findViewById(R.id.ListView01); numberList.setSelected(true);
179
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3) {
SQLiteDatabase db =
dbHelper.getReadableDatabase();
cursor = db.rawQuery("SELECT * FROM data",null);
cursor.moveToPosition(arg2);
ed_num.setText(cursor.getString(1)); ed_name.setText(cursor.getString(2)); id=cursor.getInt(0);
}});
dbHelper = new mySqlHelper(this); view();
}
private long addData(String num,String name) {
SQLiteDatabase db = dbHelper.getWritableDatabase(); try{
ContentValues newValues = new ContentValues(); newValues.put("number", num);
newValues.put("name", name);
db.insert(dbHelper.TABLE, null, newValues); }
catch(Exception e) {
ed_num.setText(e.toString()); }
return 0; }
public void but_inClick(View v) {
addData(ed_num.getText().toString(),ed_name.getText().toString()); view();
}
public void but_DelClick(View v) {
SQLiteDatabase db = dbHelper.getWritableDatabase(); try{
if(id!=-1)
{
db.delete(dbHelper.TABLE, "_id="+id, null);
view();
180
}catch(Exception e) {
ed_num.setText(e.toString()); }
}
public void but_EditClick(View v) {
SQLiteDatabase db = dbHelper.getWritableDatabase(); try{
if(id!=-1)
{
ContentValues updateVal = new ContentValues(); updateVal.put("number",
ed_num.getText().toString());
updateVal.put("name",
ed_name.getText().toString());
db.update("data", updateVal, "_id="+id,null);
view();
}
}
catch(Exception e) {
ed_num.setText(e.toString()); }
}
private void view() {
SQLiteDatabase db = dbHelper.getReadableDatabase(); try{
cursor = db.rawQuery("SELECT * FROM data",null); adapter = new SimpleCursorAdapter(
this,
R.layout.view2,
cursor,
new String[] {"number","name"}, new int[] {R.id.number,R.id.name}); numberList.setAdapter(adapter);}
catch(Exception e) {
ed_num.setText(e.toString()); }
181
Langkah 5 : Kemudian, buatlah sebuah class java baru, beri nama
mySqlHelper.java
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
public class mySqlHelper extends SQLiteOpenHelper{
private static final String DATABASE_NAME = "mydatabase.db";
private static final int DATABASE_VERSION = 1; // Table name
public static final String TABLE = "data"; // Columns
public static final String number = "number";
public static final String name = "name";
public mySqlHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION); // TODO Auto-generated constructor stub
}
@Override
public void onCreate(SQLiteDatabase db) {
String sql = "create table " + TABLE + "( _id"
+ " integer primary key autoincrement, " + number + " text not null, "
+ name + " text not null);"; Log.d("Data", "onCreate: " + sql); db.execSQL(sql);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int
newVersion) {
// TODO Auto-generated method stub }
}
Langkah 6 :lakukan editing pada AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.stef.usingContentValues"
182
<application android:icon="@drawable/icon"android:label="@string/app_name">
<activity android:name=".usingContentValues" android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category
android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<uses-sdk android:minSdkVersion="7" />
</manifest>
Tekan F11 untuk mendebug aplikasi pada emulator Android
Langkah 7 : Maka akan muncul outputnya
d.
Percobaan 4 : Membuat database dengan Book
Langkah 1: Buat project Android baru pada Eclipse
183
<?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" >
<TextView
android:id="@+id/mytext"
android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" />
<LinearLayout
android:id="@+id/LinearLayout01" android:layout_width="wrap_content" android:layout_height="wrap_content" >
<EditText
android:id="@+id/Ed_search"
android:layout_width="wrap_content" android:layout_height="wrap_content" >
</EditText>
<Button
android:id="@+id/But_Search"
android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="but_SearchClick" android:text="SEARCH" >
</Button>
</LinearLayout>
<TextView
android:id="@+id/text_Jumlah" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Jumlah :" >
</TextView>
<ListView
android:id="@+id/ListView01"
android:layout_width="wrap_content" android:layout_height="wrap_content" >
184
</LinearLayout>
Langkah 3 : Lengkapi statement berikut pada class java MainActivity
import android.app.Activity;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.Button;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.TextView;
public class Book extends Activity { mySqlHelper dbHelper;
private TextView Jumlah;
private EditText ed_Search;
private TextView mytext;
private Button but_Search; protected Cursor cursor; protected ListAdapter adapter; protected ListView List;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
setContentView(R.layout.main); dbHelper = new mySqlHelper(this);
mytext=(TextView) findViewById(R.id.mytext); but_Search=(Button) findViewById(R.id.But_Search); ed_Search=(EditText) findViewById(R.id.Ed_search); List=(ListView) findViewById(R.id.ListView01); Jumlah=(TextView) findViewById(R.id.text_Jumlah);
}
public void but_SearchClick(View v) {
try{
SQLiteDatabase db = dbHelper.getReadableDatabase(); cursor = db.rawQuery("SELECT _id,title,type FROM book where title LIKE '%"
185
,null);
adapter = new SimpleCursorAdapter(
this,
android.R.layout.simple_list_item_2,
cursor,
new String[] {"title","type"},
new int[]
{android.R.id.text1,android.R.id.text2}); List.setAdapter(adapter);
cursor = db.rawQuery("select count(type) from book where title LIKE '%"
+ed_Search.getText().toString()+"%'",null); cursor.moveToFirst();
Jumlah.setText("Jumlah : "+cursor.getInt(0));
}
catch(Exception e) {
mytext.setText(e.toString()); }
} }
Langkah 4 : Buatlah sebuah activity lagi, beri nama MySqlHelper.java
package com.stef.Book;
import android.content.ContentValues;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
public class mySqlHelper extends SQLiteOpenHelper{
private static final String DATABASE_NAME = "database.db";
private static final int DATABASE_VERSION = 1;
// Table name
public static final String TABLE = "book"; // Columns
public static final String title = "title";
public static final String type = "type";
186
super(context, DATABASE_NAME, null, DATABASE_VERSION);// TODO Auto-generated constructor stub }
@Override
public void onCreate(SQLiteDatabase db) {
String sql = "create table " + TABLE + "( _id"
+ " integer primary key autoincrement, " + title + " text not null, "
+ type + " text not null);"; Log.d("Data", "onCreate: " + sql); db.execSQL(sql);
ContentValues newValues = new ContentValues(); newValues.put("title", "Mengenal android"); newValues.put("type", "technology");
db.insert(TABLE, null, newValues);
newValues = new ContentValues();
newValues.put("title", "Memasak dengan mudah"); newValues.put("type", "hoby");
db.insert(TABLE, null, newValues);
newValues = new ContentValues();
newValues.put("title", "cerita anak sma"); newValues.put("type", "fiction");
db.insert(TABLE, null, newValues);
newValues = new ContentValues();
newValues.put("title", "Memancing di danau"); newValues.put("type", "hoby");
db.insert(TABLE, null, newValues);
newValues = new ContentValues();
newValues.put("title", "cinta membawa hati"); newValues.put("type", "fiction");
db.insert(TABLE, null, newValues);
newValues = new ContentValues();
newValues.put("title", "belajar menari dengan kaset"); newValues.put("type", "hoby");
db.insert(TABLE, null, newValues); }
187
public void onUpgrade(SQLiteDatabase db, int oldVersion, int
newVersion) {
// TODO Auto-generated method stub
db.execSQL("DROP TABLE IF EXISTS " + TABLE); // Create a new one.
onCreate(db); }
}
Lakukan editing pada kode yang dicetak tebal berikut pada class
AndroidManifest.xml:
<?xml version="1.0" encoding="utf-8"?> <manifest
xmlns:android="http://schemas.android.com/apk/res/android"
package="com.stef.Book" android:versionCode="1" android:versionName="1.0">
<application android:icon="@drawable/icon"
android:label="@string/app_name">
<activity android:name=".Book"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN"
/>
<category
android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<uses-sdk android:minSdkVersion="7" />
</manifest>