Mengisi Database App saat Instalasi

22 February 2017 at 21:26 | Posted in android, Uncategorized | Leave a comment

— Catatan: Sebenarnya saya biasa posting tentang Android dev di blog yang lain (indonesiaberkicau.com), tapi hosting Qwords terlalu sering bermasalah (situs tidak merespon). Saya sudah upgrade ke paket yang lebih tinggi tapi tetap bermasalah, mau upgrade lagi apa ada jaminan bakal lancar? Informasi penyebab situs mati juga tidak ada (habis resources yang mana?). Oleh karena itu saya akan pindahkan ke blog ini saja — end

Pada aplikasi yang sedang saya buat, saya ingin agar database terisi saat user selesai menginstall app. Cara yang paling sederhana dengan mengisi satu persatu data di method SQLiteOpenHelper.onCreate(SQLiteDatabase) dengan query insert, tapi tidak praktis untuk data yang cukup banyak. Cara yang lain adalah membuat database di luar, diletakkan di assets lalu file database ini dicopy. Harusnya ini yang paling cepat, karena langsung copy antar file dan tidak melibatkan database. Cuma setelah saya coba, selalu gagal, dan ada resiko jika struktur database yang digunakan Android berganti.

Solusi yang saya gunakan adalah membuat file JSON lalu diletakkan di direktori assets kemudian diparsing dan diinsert.  Contoh JSON-nya seperti ini:

[
   {
     "nama": "resto A",
     "alamat": "sarijadi blok 23",
     "telp": "08162424"
   },
   {
     "nama": "resto B",
     "alamat": "buahbatu",
     "telp": "0832324"
   }
]

Simpan sebagai file teks, letakkan di direktori assets (…\app\src\main\assets).

Code berikut memparse data ini dan memindahkannya ke tabel. Transaction diatur manual agar kinerja lebih optimal (cuma belum saya test). Untuk data yang besar, sebaiknya proses load ini dilakukan di thread yang terpisah.

public static final String TABLE_INSERT = "insert into tempat_makan (nama, telepon, alamat) values(?,?,?)";
private static String DATA_FILE = "data.txt";
private void loadData(SQLiteDatabase db) {
    try {
        InputStream myInput  = myContext.getAssets().open(DATA_FILE);
        String jsonStr = getStringFromInputStream(myInput);
        SQLiteStatement insert = db.compileStatement(TABLE_INSERT);
        db.beginTransaction();
        JSONArray jArr = new JSONArray(jsonStr); //karena dimulai dgn array
        for (int i=0; i < jArr.length(); i++)
        {
            JSONObject jObj = jArr.getJSONObject(i);

            String nama      = jObj.getString("nama");
            String alamat    = jObj.getString("alamat");
            String telp      = jObj.getString("telp");

            insert.bindString(1,nama);
            insert.bindString(2,alamat);
            insert.bindString(3,telp);
            insert.execute();
        }
        db.setTransactionSuccessful();
    } catch (Exception e) {
        e.printStackTrace();
        Log.e("yw",e.getMessage());
    } finally {
        db.endTransaction();
    }
}
Advertisements

Leave a Comment »

RSS feed for comments on this post. TrackBack URI

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

Blog at WordPress.com.
Entries and comments feeds.

%d bloggers like this: