Beranda > Blackberry > Bagaimana parsing JSON pada Blackberry

Bagaimana parsing JSON pada Blackberry

Permasalahan

Saya ingin membangun semacam aplikasi Blackberry untuk troble shooting atau semacamnya. Menurut saya, teknik terbaik adalah menggunakan konfirmasi berlapis. Saya kesulitan menggambarkan maksud saya dalam bentuk tulisan. Mungkin lain kali saya lengkapi. Lebih mudah menggambarkan konsep ini dalam bentuk contoh. Contohnya begini:

Ketika kita melihat seorang teman berada di depan komputernya, pada jam makan siang (sepertinya dia belum makan), maka kita akan bertanya, “Apakah Anda sudah makan?”. Dia cukup menjawab ya atau tidak. Jika jawabannya adalah ya, maka kita hanya akan berkomentar, “Waaah, kenyang dong.” Tetapi, jika jawabannya adalah tidak, maka kita akan lanjutkan pertanyaannya dengan, “Kenapa? Apakah Anda tidak punya uang?” Dan dia cukup menjawab, ya dan tidak. Jika jawabannya ya, maka kita akan menyarankan, “Ambil di ATM dong mas.” Sedangkan jika jawabannya tidak, maka komentar kita, “Tuh mas, di gang sebelah banyak warung.” Nah, percakapan semacam ini ingin saya modelkan ke dalam bentuk aplikasi Blackberry.

Mengapa konsep ini saya sebut terbaik? Karena, dalam sistem otomatis, sistem membutuhkan jawaban yang pasti dan terbatas pada pilihan-pilihan, sehingga sistem mudah menentukan langkah selanjutnya. Sistem sederhana tidak mampu menanggapi jawaban berrupa essay.

Konsep

Saya akan menggunakan JSON sebagai dasar membuat alur konfirmasi. Susunannya kurang lebih sebagai berikut:

{'symptom': {
 'message': 'Apakah Anda sudah makan?',
 'yes': {
 'message': 'Waaah, kenyang dong.'
 },
 'no': {
 'message': 'Kenapa? Apakah Anda tidak punya uang?',
 'yes': {
 'message': 'Ambil di ATM dong mas.'
 },
 'no': {
 'message': 'Tuh mas, di gang sebelah banyak warung.'
 }
 }

}}

Dengan J2ME (pemrograman Java pada Blackberry masuk dalam kelompok J2ME), kita belum bisa langsung membaca struktur dalam JSON. Karenanya, kita membutuhkan sebuah library. Kita bisa menggunakan JSON-J2ME dari Tavon.org. Yang menjadi permasalahan berikutnya, tentu saja, adalah bagaimana menggunakannya dalam Java Micro Edition pada Blackberry?

Solusi

Saya akan memberikan sebuah contoh implementasi. Anda bisa mempelajari dari kode sumber saya ini.

/*
 * HierartchialConfirmation.java
 *
 * © Amri Shodiq, 2003-2008
 * Confidential and proprietary.
 */

import net.rim.device.api.ui.*;
import net.rim.device.api.ui.component.*;
import net.rim.device.api.ui.container.*;
import net.rim.device.api.system.*;

import java.util.Enumeration;
import java.util.Hashtable;
import java.util.Vector;
import org.json.me.*;

/**
 * Aplikasi utama.
 */
class HierarchialConfirmation extends UiApplication {
 public HierarchialConfirmation() {
 pushScreen(new HierarchialConfirmationScreen());
 }

 public static void main(String[] args) {
 HierarchialConfirmation hc = new HierarchialConfirmation();
 hc.enterEventDispatcher();
 }
}

final class HierarchialConfirmationScreen extends MainScreen {
 private ConfirmationItem c;

 public HierarchialConfirmationScreen() {
 super();
 LabelField lf = new LabelField("Dokter di Rumah Anda.");
 add(lf); // menambahkan label ke atas Screen
 }

 public boolean onClose() {
 // menampilkan pesan sebelum keluar dari program
 Dialog.alert("Terima kasih telah memakai.");
 System.exit(0);
 return true;
 }

 protected void makeMenu(Menu menu, int instance) {
 // menambahkan 2 menu item kepada aplikasi
 menu.add(viewItem);
 menu.add(closeItem);
 }

 // menu item view bertuliskan 'Informasi'
 private MenuItem viewItem = new MenuItem("Informasi", 110, 10) {
 public void run() {
 try {
 // inisiasi JSON dengan hard coded, kenyataannya, kita bisa mengubahnya nanti dengan
 // misalnya mengambil dari internet atau sumber lain.
 JSONTokener jt = new JSONTokener("{'symptom': { 'message': 'Apakah Anda sudah makan?', "+
 "'yes': { 'message': 'Waaah, kenyang dong.' }, 'no': { 'message': 'Kenapa? Apakah Anda "+
 "tidak punya uang?', 'yes': { 'message': 'Ambil di ATM dong mas.' }, 'no': { 'message': "+
 "'Tuh mas, di gang sebelah banyak warung.' } } } }");

 JSONObject j = new JSONObject(jt);
 Object o = j.optJSONObject("symptom"); // symptom adalah root
 if (o instanceof JSONObject) {

 // melakukan iterasi selama nilai o tidak bernilai null
 while (o != null) {
 if (((JSONObject)o).has("yes") && ((JSONObject)o).has("no")) {
 int confirm = Dialog.ask(Dialog.D_YES_NO, ((JSONObject)o).optString("message"));
 if (confirm == Dialog.YES) o = ((JSONObject)o).getJSONObject("yes");
 else if (confirm == Dialog.NO) o = ((JSONObject)o).getJSONObject("no");
 } else {
 Dialog.alert(((JSONObject)o).optString("message"));
 o = null; // menandai sebagai iterasi terakhir
 }
 }
 }
 } catch (JSONException e) {
 Dialog.alert("Error: "+e.getMessage());
 }

 }
 };

 // menu item close
 private MenuItem closeItem = new MenuItem("Tutup", 2000, 10) {
 public void run() {
 onClose();
 }
 };
}

Kesimpulan

Untuk parsing JSON pada dengan Java pada Blackberry Device atau J2ME secara umum, kita bisa menggunakan library JSON-J2ME. Saya tidak menyertakan keterangan detil tentang bagaimana menambahkan library JSON-J2ME ke dalam project Anda. Jika Anda ingin tahu lebih dalam tentang ini, silakan hubungi saya.

Sumber lain

Ada tutorial lain, berjudul: Using JSON for Mobile Object Exchange.

Updated 07082009
Download JSON-ME API: org.json.me.

Kategori:Blackberry Tag:,
  1. Reinhart Chandra
    Agustus 6, 2009 pukul 4:24 am

    sore pak..pak saya mahasiswa informatika..
    sekarang lagi mw bangun aplikasi blackberry dengan menggunakan format data JSON..
    tp saya ga punya library json buat diblackberry nya pak..saya bisa minta tolong dikirimin ke email saya pak..penting bgt pak..
    tolong ya pak..

  2. Reinhart Chandra
    Agustus 6, 2009 pukul 11:46 pm

    pak sebelumnya terima kasih bnyk udah ngirimin jsonnya..oiya pak saya kan pake eclipse buat aplikasi blackberrynya trus library itu di letakkan dimana ya pak?mohon bantuannya ya pak..

  3. Amri Shodiq
    Agustus 7, 2009 pukul 1:30 am

    Kebetulan saya menggunakan JDE.
    Yang saya lakukan adalah membuat project Library baru (disamping project yang utama yang akan menggunakan library ini), dalam satu workspace dengan project utamanya. Misalnya dengan nama JsonMe. Kemudian, saya add semua source code JSON-ME dg cara klik kanan JsonMe | Add File to Project …
    Kemudian klik kanan project utama, pilih Project Dependencies …, berikan tanda cek pada JsonMe.

    Saya belum menggunakan Blackberry Eclipse plugins, tetapi secara umum adik bisa menggunakan cara ini:
    Ekstrak JSON-ME. Copy isi direktori org.json.me (jadi yang dicopy adalah direktori org) ke dalam direktori project Anda. Otomatis Eclipse menganggapnya bagian dari project Anda dalam package org.json.me.

    Memang cara ini tidak standar, tapi it works.

  4. Reinhart Chandra
    Agustus 9, 2009 pukul 1:29 am

    pak..librari json kemaren sudah bisa dibuat pak..terima kasih pak..
    saya mau tanya lagi pak..
    jadi saya mau ngambil data dari internet yg formatnya json..itu cara ngambil data jsonnya gimana pak kalo di blackberry?
    nanti data2 itu mau saya parsing pak buat informasi di aplikasi yang dibuat…saya mohon bantuannya pak..

  5. Amri Shodiq
    Agustus 10, 2009 pukul 12:07 am

    Syukurlah kalau begitu.

    Cara memanggil data dari internet ya. Kalau yang adik maksud seperti ini:

    1. Blackberry menghubungi alamat URL tertentu
    2. Web server mengembalikan nilai tertentu
    3. Blackberry menerima nila kembalian
    4. Blackberry mem-parse data yang diterima

    maka mungkin sementara Adik bisa membaca ini dulu: http://amrishodiq.co.cc/blog/2009/07/tutorial-j2me-client-server-database/.

    Memang tutorial tersebut tidak spesifik untuk Blackberry, tetapi paling tidak, Adik bisa mengambil pelajarannya bagaimana koneksi HTTP dengan J2ME. Untuk yang khusus Blackberry, akan saya coba buatkan sebuah script. Mungkin beberapa hari kedepan sudah jadi, silakan cek terus blog ini.

  6. Amri Shodiq
    Agustus 10, 2009 pukul 12:00 pm
  7. Reinhart Chandra
    Agustus 12, 2009 pukul 5:29 am

    oh iya pak..maksud saya seperti yg bapak ungkapan pada langkah 1-4 itu pak..
    saya jg lagi coba-coba buat pak..oh iya pak saya kan mau menggunakan database diblackberry nanti.
    saya sudah download JDE yg support SQLite pak..tp waktu saya pake librarynya ternyata belum ada pak..
    apa emang harus download lagi ya pak?

  8. Agustus 12, 2009 pukul 5:55 am

    Saya belum pernah menggunakan SQLite. Saya sendiri ingin mencoba, tapi download JDE itu sungguh menyakitkan. Putus koneksi sebentar saja, saya harus ulang lagi. Jadi, terus terang saja, kalau yang adik inginkan adalah plugins yang ukurannya lebih kecil untuk didownload, saya tidak tahu dari mana mendapatkannya.

    Kalau saya, untuk menggunakan database yang kecil dan sederhana, lebih suka menggunakan RMS. Dengan catatan tidak perlu ada hubungan relasional. Tapi, kalau database-nya kompleks, menurut saya lebih baik menggunakan model client-server saja. Hingga ssat ini, belum ada alasan yang tepat untuk menggunakan SQLite.

  9. reinhart chandra
    Agustus 16, 2009 pukul 5:30 am

    malam pak..
    pak saya boleh minta bantuannya lagi pak..
    begini pak saya sudah coba2 melakukan koneksi dari blackberry ke internet..
    tp tetap ga bisa pak..saya juga belum bisa menampung content yang dikembalikan oleh server..contoh seperti json pak..
    kalo boleh pak..saya mau minta tolong bantuan bapak..terima kasih pak..

    • Agustus 16, 2009 pukul 6:28 pm

      Mas Reinhart, Anda mencoba koneksi ini menggunakan Simulator atau menggunakan BB device beneran? Kalau Anda menggunakan Blackberry Simulator untuk melakukan koneksi HTTP, HTTPS, email atau layanan push seperti SMS, maka Anda juga perlu menjalankan simulator MDS Server.

      Caranya, klik Start | Programs | Research in Motion | Blackberry JDE | MDS-CS. Setelah simulator MDS Server running (ada console/dos prompt berjalan dengan log-log servernya); jangan tutup console ini, baru Anda jalankan Device Simulatornya (klik Start | Programs | Research in Motion | Blackberry JDE | Device Simulator).

  10. reinhart
    Agustus 25, 2009 pukul 5:05 am

    malam pak amri..
    pak saya mau nanya lagi pak..
    saya mau tanya pak.saya kesulitan dalam memanagement user interface di j2me pak..
    saya mau buat agar tampilan saya bisa berganti layar pak ke tampilan yg lain..tapi sudah saya coba2 tetap tidak bisa pak..
    mohon bantuannya pak…terima kasih

  1. No trackbacks yet.

Tinggalkan komentar