Anda di halaman 1dari 9

MODUL PERKULIAHAN

Mobile
Programmin
g
Pertemuan 10
SQLite
Fakultas
Ilmu Komputer
penerbit Modul

Program
Studi

Teknik
Informatika

Tatap
Muka

10

Kode MK

Disusun Oleh

[kode]

Susanto Hariyanto, M.Kom.

Abstract

Kompetensi

Memahami penerapan SQLite


dalam aplikasi android

Mahasiswa menggunakan
SQLite dalam aplikasi android
yang dirancang.

Daftar Istilah
Istilah
Mobile

Pengertian
Proses pembuatan aplikasi untuk peralatan computer

Programming
SDK

mobile
Software Development Kit merupakan perangkat yang

Activity

disiapkan untuk merancang aplikasi


Semua tampilan yang memungkinkan interaksi dengan

Intent
Service

user
Proses pemanggilan activity
serangkaian proses yang tidak memiliki tampilan, tidak
dapat berinteraksi dengan user, dan berjalan di-

Shared Preferences

background
Kemampuan android untuk menyimpan data aplikasi,
sehingga dapat diakses oleh aplikasi maupun user
ketika dibutuhkan
SQLite merupakan sebuah sistem manajemen

SQLite

basisdata relasional yang bersifat ACID-compliant dan


memiliki ukuran pustaka kode yang relatif kecil, ditulis
dalam bahasa C

201
4

Mobile Programming
Susanto Hariyanto, M.Kom.

Pusat Bahan Ajar dan eLearning


http://www.mercubuana.ac.id

Mengisi ListView dengan Record


Listview dapat langsung dihubungkan dengan database dan untuk mencegah
user interface yang tidak responsif (ANR: Application Not Responding), idealnya
data diload di background.
Untuk mencapai hal ini dapat digunakan SimpleCursorAdapter, ContentProvider
dan Loader. Sayangnya hal ini cukup kompleks (mudah-mudahan akan lebih
disederhanakan di API berikutnya). Berikut adalah contoh penggunakan ketiga
class tersebut.
Pertama buat project baru:

Seperti dalam contoh sebelumnya, buat class helper yang merupakan turunan
dari kelas SQLiteOpenHelper.
Catatan: untuk dapat menggunakan cursor adapter, table harus mengandung
field _id (huruf kecil)
public class DbHelper extends SQLiteOpenHelper {
private static final int DATABASE_VERSION =1;
private static final String DATABASE_NAME ="dbMhs";
//cursoradapter mewajibkan nama _id
//harus _id dengan huruf kecil, JANGAN _ID
private static final String TABLE_CREATE =
"CREATE TABLE MHS (_id integer primary key autoincrement, " +
"nama text);";

public DbHelper(Context context, String name,


CursorFactory factory, int version) {
super (context,DATABASE_NAME,factory,DATABASE_VERSION);
}
public DbHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
//create database
db.execSQL(TABLE_CREATE);
}
201
4

Mobile Programming
Susanto Hariyanto, M.Kom.

Pusat Bahan Ajar dan eLearning


http://www.mercubuana.ac.id

@Override
public void onUpgrade(SQLiteDatabase db, int oldVer, int newVer) {
//jika database diupgrade, hapus yang lama, buat yang baru
db.execSQL("DROP TABLE IF EXISTS MHS");
onCreate(db);
}
}

Selanjutnya kita akan membuat class Contentprovider untuk mengakses tabel.


Catatan:
Biasanya Contentprovider dibuat agar data app kita dapat
diakses oleh app lain. Tapi class Contentprovider juga dapat
digunakan di app sendiri secara private (tidak bisa diakses
app lain). Keuntungan content provider adalah:
1. Dapat dieksekusi secara asynchronus, sehingga
menghindari error app not responding.
2. Memberikan akses tunggal ke data.
3. Memudahkan hubungan antara view (widget) dengan
data melalui ContentObserver milik ContentResolver.
4. Dimanfaatkan untuk rest client app.
Kerugian menggunakan contentprovider? relatif rumit.
Class ini merupakan turunan dari ContentProvider (gambar bawah)

Untuk tahap pertama hanya insert dan query yang dibuat. Update dan delete
akan dibahas berikutnya. Contentprovider yang dibuat ini juga dapat digunakan
untuk widget yang lain, tidak harus berupa ListView. Cara penggunaanya dapat
dilihat di MainActivity nanti.
public class MhsContentProvider extends ContentProvider {
// database
private DbHelper database;
// konstanta2 dibawah mendefinisikan bagaimana contentprovider ini diakses
// contentprovider diakses melalui URI
// contoh penggunaa URI ini dapat dilihat di MainActivity

private static final int MHS = 1;


private static final int MHS_ID = 2;
private static final String AUTHORITY = "package.contentprovider";
private static final String BASE_PATH = "mhs";

201
4

Mobile Programming
Susanto Hariyanto, M.Kom.

Pusat Bahan Ajar dan eLearning


http://www.mercubuana.ac.id

public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY


+ "/" + BASE_PATH);
private static final UriMatcher sURIMatcher = new UriMatcher(UriMatcher.NO_MATCH);
static {
sURIMatcher.addURI(AUTHORITY, BASE_PATH, MHS);
sURIMatcher.addURI(AUTHORITY, BASE_PATH + "/#", MHS_ID);
}
@Override
public Uri insert(Uri uri, ContentValues values) {
//insert data
int uriType = sURIMatcher.match(uri);
SQLiteDatabase sqlDB = database.getWritableDatabase();
long id = 0;
switch (uriType) {
case MHS:
id = sqlDB.insert("MHS", null, values);
break;
default:
throw new IllegalArgumentException("URI tdk dikenal: " + uri);
}
//notifikasi
getContext().getContentResolver().notifyChange(uri, null);
return Uri.parse(BASE_PATH + "/" + id);
}
@Override
public boolean onCreate() {
database = new DbHelper(getContext());
return false;
}
@Override
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs,String sortOrder) {
//query tabel
SQLiteDatabase db = database.getWritableDatabase();
Cursor cur=null;
int uriType = sURIMatcher.match(uri);
switch (uriType) {
case MHS:
//ambil semua
cur = db.query("MHS",projection,selection,selectionArgs,sortOrder,null,null);
break;
case MHS_ID:
// ambil berdasarkan id nanti dibuat
break;
default:
throw new IllegalArgumentException("URI tidak dikenal: " + uri);
}
//notifikasi
cur.setNotificationUri(getContext().getContentResolver(), uri);
return cur;
}
@Override
public int update(Uri arg0, ContentValues arg1, String arg2, String[] arg3) {
// nanti dibuat
return 0;
}

@Override
public int delete(Uri arg0, String arg1, String[] arg2) {
// nanti dibuat
return 0;

201
4

Mobile Programming
Susanto Hariyanto, M.Kom.

Pusat Bahan Ajar dan eLearning


http://www.mercubuana.ac.id

}
@Override
public String getType(Uri arg0) {
// nanti dibuat
return null;
}
}

Content provider ini harus didaftarkan di AndroidManifest. Buka dan tambahkan


di dalam <application>. android:exported=false menunjukkan bahwa content
provider ini private dan tidak dapat diakses app lain. Sedangkan android:name
adalah nama kelas, penggunaan titik pada .MhsContentProvider merupakan
singkatan dari nama app. Jadi .MhsContentProvider artinya sama dengan
edu.upi.cs.yudi.listviewdb.MhsContentProvider
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="edu.upi.cs.yudi.listviewdb.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<provider
android:exported="false"
android:name=".MhsContentProvider"
android:authorities="package.contentprovider" >
</provider>
</application>

Setelah Helper dan ContentProvider dibuat, selanjutnya kita akan


mempersiapkan ListView. Caranya seperti ListView pada contoh sebelumnya.
Buka layout/activity_main.xml, drag listview.

Selanjutnya buat xml layout baru sebagai isi dari baris di listview (pilih layout,
klik kanan new Android XML ) Beri nama row.xml, dan tambahkan dua
textview. Ganti namanya dengan tvNama dan tvId.

201
4

Mobile Programming
Susanto Hariyanto, M.Kom.

Pusat Bahan Ajar dan eLearning


http://www.mercubuana.ac.id

Selanjutnya kita akan melengkapi ActivityMain.java. Activity ini mengimplemen


LoaderCallback sehingga data akan diload dibackground dan baru diisi ke
ListView saat sudah selesai. Pada activity ini akan diinsert dua record kemudian
ditampilkan dalam listview.
//implementes LoaderManager
public class MainActivity extends Activity implements LoaderManager.LoaderCallbacks<Cursor> {
//adapter untuk listview
private SimpleCursorAdapter adapter;
private void insertData() {
//masukkan dua data untuk testing
ContentValues values = new ContentValues();
values.put("nama", "rudi");
//perhatikan penggunaan URI untuk mengidentifikasi contentprovider
//isi dari MhsContentProvider.CONTENT_URI adalah:
// content://edu.upi.cs.yudi.listviewdb.contentprovider/mhs
getContentResolver().insert(MhsContentProvider.CONTENT_URI, values);

values = new ContentValues();


values.put("nama", "budi");
getContentResolver().insert(MhsContentProvider.CONTENT_URI, values);

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ListView lv = (ListView) findViewById(R.id.listView1);
//testing insert data. Setelah dijalankan sekali, bisa dikomentari
insertData();
//harus _id dengan huruf kecil!
String[] proj = new String[] { "_id","nama"};
// widget UI yang dipetakan sesuai field diatas (di row.xml)
int[] to = new int[] { R.id.tvId, R.id.tvNama };
getLoaderManager().initLoader(0, null, this);
//adapter yang digunakan adalah simplecursoradapter
adapter = new SimpleCursorAdapter(this, R.layout.row, null, proj,to, 0);
lv.setAdapter(adapter);
}
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
201
4

Mobile Programming
Susanto Hariyanto, M.Kom.

Pusat Bahan Ajar dan eLearning


http://www.mercubuana.ac.id

//load data ke cursor


//harus ada _id dengan huruf kecil!
String[] projection = { "_id", "nama" };
CursorLoader cursorLoader = new CursorLoader(this,
MhsContentProvider.CONTENT_URI, projection, null, null, null);
return cursorLoader;
}
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor cur) {
//dipanggil saat cursor sudah terisi, dilakukan
//dibackground sehingga user interface tetap responsif
//isi adapter dengan cursor yang sudah terisi
adapter.swapCursor(cur);
}

@Override
public void onLoaderReset(Loader<Cursor> loader) {
//reset, kosongkan
adapter.swapCursor(null);
}

Materi Minggu Depan:


Buat applikasi untuk menyimpan datamahasiswa (NIM, NAMA, ALAMAT). Buatlah
menu untuk menambahkan data dan mencari berdasarkan NIM (NIM diinput oleh
user).

Latihan SQLite2:
Modifikasi latihan activity-intent agar dapat menyimpan ke database.

201
4

Mobile Programming
Susanto Hariyanto, M.Kom.

Pusat Bahan Ajar dan eLearning


http://www.mercubuana.ac.id

Daftar Pustaka
1. (2013). Retrieved 03 28, 2014, from
http://developer.android.com/training/basics/activitylifecycle/stopping.html.
2. Burd, B. (2012). Android Application Development All-in-One For
Dummies. For Dummies.
3. Cinar, O. (2012). Android Apps with Eclipse (1 ed.). Appress.
4. Murphy, M. L. (2010). Android Programming Tutorials. United States of
America: CommonsWare, LLC.

201
4

Mobile Programming
Susanto Hariyanto, M.Kom.

Pusat Bahan Ajar dan eLearning


http://www.mercubuana.ac.id

Anda mungkin juga menyukai