Anda di halaman 1dari 9
MODUL PERKULIAHAN Mobile Programmin g Pertemuan 10 SQLite Fakultas Program Tatap Kode MK Disusun Oleh Studi

MODUL PERKULIAHAN

Mobile

Programmin

g

Pertemuan 10

SQLite

 

Fakultas

Program

Tatap

Kode MK

Disusun Oleh

Studi

Muka

Ilmu Komputer

Teknik

10

[kode]

Susanto Hariyanto, M.Kom.

penerbit Modul

Informatika

 

Abstract

Memahami penerapan SQLite dalam aplikasi android

Kompetensi

Mahasiswa menggunakan SQLite dalam aplikasi android yang dirancang.

Daftar Istilah

Istilah

Pengertian

Mobile

Proses pembuatan aplikasi untuk peralatan computer

Programming

mobile

SDK

Software Development Kit merupakan perangkat yang

disiapkan untuk merancang aplikasi

Activity

Semua tampilan yang memungkinkan interaksi dengan

user

Intent

Proses pemanggilan activity

Service

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

background

Shared Preferences

Kemampuan android untuk menyimpan data aplikasi, sehingga dapat diakses oleh aplikasi maupun user

ketika dibutuhkan

SQLite

SQLite merupakan sebuah sistem manajemen basisdata relasional yang bersifat ACID-compliant dan memiliki ukuran pustaka kode yang relatif kecil, ditulis

dalam bahasa C

Daftar Istilah Istilah Pengertian Mobile Proses pembuatan aplikasi untuk peralatan computer Programming mobile SDK Software Development

201

 

Mobile Programming

 

4

2

Pusat Bahan Ajar dan eLearning

 

Susanto Hariyanto, M.Kom.

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:

Mengisi ListView dengan Record Listview dapat langsung dihubungkan dengan database dan untuk mencegah user interface yang

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

 

Mobile Programming

 

4

3

Pusat Bahan Ajar dan eLearning

 

Susanto Hariyanto, M.Kom.

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)

@Override public void onUpgrade(SQLiteDatabase db, int oldVer, int newVer) { //jika database diupgrade, hapus yang lama,

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; private static final int MHS = 1; private static final int
// database
private DbHelper database;
private static final int MHS = 1;
private static final int MHS_ID = 2;

// konstanta2 dibawah mendefinisikan bagaimana contentprovider ini diakses // contentprovider diakses melalui URI // contoh penggunaa URI ini dapat dilihat di MainActivity

private static final String AUTHORITY = "package.contentprovider";

private static final String BASE_PATH = "mhs";

201

 

Mobile Programming

 

4

4

Pusat Bahan Ajar dan eLearning

 

Susanto Hariyanto, M.Kom.

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

 

Mobile Programming

 

4

5

Pusat Bahan Ajar dan eLearning

 

Susanto Hariyanto, M.Kom.

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 “.MhsContentProviderartinya 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>

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

Setelah Helper dan ContentProvider dibuat, selanjutnya kita akan mempersiapkan ListView. Caranya seperti ListView pada contoh sebelumnya. Buka layout/activity_main.xml, drag listview.

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

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

 

Mobile Programming

 

4

6

Pusat Bahan Ajar dan eLearning

 

Susanto Hariyanto, M.Kom.

http://www.mercubuana.ac.id

Selanjutnya kita akan melengkapi ActivityMain.java. Activity ini mengimplemen LoaderCallback sehingga data akan diload dibackground dan baru

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

 

Mobile Programming

 

4

7

Pusat Bahan Ajar dan eLearning

 

Susanto Hariyanto, M.Kom.

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.

//load data ke cursor //harus ada _id dengan huruf kecil! String[] projection = { "_id" ,

201

 

Mobile Programming

 

4

8

Pusat Bahan Ajar dan eLearning

 

Susanto Hariyanto, M.Kom.

http://www.mercubuana.ac.id

Daftar Pustaka

  • 1. (2013). Retrieved 03 28, 2014, from
    http://developer.android.com/training/basics/activity- lifecycle/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.

Daftar Pustaka 1. (2013). Retrieved 03 28, 2014, from http://developer.android.com/training/basics/activity- lifecycle/stopping.html. 2. Burd, B. (2012). Android

201

 

Mobile Programming

 

4

9

Pusat Bahan Ajar dan eLearning

 

Susanto Hariyanto, M.Kom.

http://www.mercubuana.ac.id