OOP(Object Oriented Programming) Siapa takut?

Membuat Kuis Pilihan Ganda


Kesalahpahaman saya dalam memahami logika OOP justru membawa berkah kecil buat saya, dimana dengan tak sengaja saya dapat menyelesaikan program kecil yang bekerja untuk aplikasi 'kuis pilihan ganda' untuk operasi system android. 
Saya membangun aplikasinya dengan memusatkan perhatian saya pada obyek-obyek yang ada di dalam struktur pilihan ganda. Apakah hal itu termasuk OOP? ternyata tidak... tapi miriplah, silahkan baca tentang OOP di http://docs.oracle.com/javase/tutorial/java/concepts/object.html

Namun demikian pemahaman secara rinci tentang rangkaian obyek yang akan di pakai dalam programming sebuah aplikasi adalah sangat penting. Saya selalu bertanya, mengapa orang-orang programmer selalu menyebut segala sesuatunya sebagai obyek atau object? ternyata hal itu di karenakan oleh sifat-sifat dasar komputer, yaitu bahwa komputer adalah pintar tapi ia tuli, bisu, buta dan sama sekali tak punya perasaan, Sehingga kalau kita mau programming, anggaplah komputer sebagai teman dekat yang tuli, bisu, buta dan tak punya perasaan tapi pintar. Kalau kita punya teman yang tuli, bisu, buta dan tak punya perasaan maka kita hanya akan bisa berkomunikasi dengan-nya menggunakan obyek, misalnya kita beri dia besi maka dia akan tahu itu adalah besi, kalau kita beri dia kayu maka dia akan tahu bahwa itu adalah kayu.  Bahkan melalui nalurinya ia juga akan segera tahu apakah kayu dan besi berbentuk segi empat?, bulat? dll

Di dalam aplikasi 'pilihan ganda' tentunya akan ada beberapa obyek, seperti obyek 'pertanyaan' yang masing-masing memiliki 4 buah kemungkinan (obyek)jawaban-nya yaitu obyek a, b, c, atau d yang dapat di pilih mana yang benar menurut peserta. Kemudian semua jawaban-nya akan di saring untuk menghitung berapa (obyek) yang benar dan berapa (obyek) yang salah. Jawaban(obyek) yang salah akan di beri warna merah, dan jawaban(obyek)  yang benar akan di beri warna hijau...dll.
Semua itu akan di anggap oleh komputer sebagai obyek, karena komputer tak punya akal. Maksudnya, kita manusia kalau menyebut pilihan ganda, kita tahu secara pasti apa itu pilihan ganda tanpa menjelaskannya lebih lanjut. Tapi komputer akan melihat pilihan ganda sebagai obyek yang terbuat dari huruf "p, i, l, i, h, a, n,  g, a, n, d, a"  ...mmmhhh  dan jangan lupa menjelaskan ke komputer bahwa ada spasi antara 'pilihan' dan 'ganda'. Nah itulah yang saya maksudkan dengan object disini.

Obyek-obyek tersebut hanya akan berlogika atau memiliki arti atau dapat di program atau di pahami oleh komputer jikalau model datanya di deklarasi terlebih dahulu. Hah... di deklarasi macam apa? hey mr komputer:
ayam=kakinya_dua_dan_bersayap;
kerbau=kakinya_empat_dan_bertanduk;
kerbauTerjual=null;
ayamPotong=null;
Deklarasinya mirip2 itulah (akan ada sedikit penjelasan tentang null, silahkan lanjut baca)

Dengan demikian, mari kita melihat, obyek-obyek apa saja yang akan di pakai dalam pembangunan aplikasi pilihan ganda ini

Mengenal obyek-obyek dalam aplikasi Pilihan Ganda


Berikut adalah obyek-obyek yang sejauh ini dapat saya kumpul. Saya menyatakan 'sejauh ini' karena aplikasinya bisa saja di kembangkan lagi dengan menambahkan armada jumlah obyek2 yang ada dengan obyek-obyek baru, tapi untuk sementara, walau saya tidak mati rasa tapi otak-ku kini hampir setengah mati sehingga aplikasi ini hanya akan di kode-kan dengan obyek2 yang  keberadaan-nya telah di setujui oleh saya, aku dan diriku melalui perdebatan yang sengit,..... yang penting berhasil toh....
Berikut adalah beberapa obyek untuk aplikasi "Pilihan Ganda":


  • pertanyaan_nya
  • urutanPertanyaan
  • pilihan1
  • pilihan2
  • pilihan3
  • pilihan4
  • jawabanYgDiPilih[]
  • jawabanYgBenar[]
  • semuaJawaban
  • selesaiJawab
  • cekPertanyaan
  • tombolSebelum
  • tombolBerikut


Menamakan object tergantung masing2 developer-lah. Saya mencoba sebisa mungkin untuk menamakan object yang berlogika sehingga bisa self-explanatory. Nama object tak boleh ada spasi yah.
Tak ada yang istimewah dari nama2 objects tsb di atas, yang berbeda hanyalah jawabanYgDiPilih[] dan jawabanYgBenar[] . Tanda kurung maksudnya akan ada isinya lebih dari satu yang akan di susun dalam bentuk 'array' agar dapat di programkan lagi dan dapat di perhitungkan eksistensi dari masing benda/object yang ada dalam array tsb. Sedangkan tombolBerikut dan tombolSebelum adalah untuk menghindari HP agar tidak meledak, ha ha ha.. just kidding kawan... hanya untuk membantu memudahkan navigasi pada layar kecil seperti layar HP.
Kalau anda tak bodoh seperti saya, maka tak menutup kemungkinan untuk memikirkan atau menemukan object2 baru sehingga aplikasi ini menjadi aplikasi yang tangguh dan di minat pasar... silahkan di kembangkan... please.
Obyek-obyek ini akan saya masukan kedalam sebuah class dengan nama ClassPertanyaan.java
Kodenya terlihat acak2an bahkan saya belum bersihkan, banyak variable yang saya dekalarasi dan beberapa object terimport tapi tak/belum terpakai sehingga untuk sementara saya pasang 'commenting' agar tak di eksekusi oleh komputer... kalau anda memakai kode ini silahkan di bersihkan dahulu yah.
Berikut adalah isi dari class ClassPertanyaan.java

package com.vik_sintus.projects.pilihanganda;
//©Vik Sintus Projects
import java.util.Arrays;

import org.json.JSONArray;
import org.json.JSONObject;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
//import android.content.Intent;
//import android.app.AlertDialog.Builder;

//import android.content.res.Resources;
import android.graphics.Color;
import android.os.Bundle;
import android.widget.Button;
//import android.widget.RadioGroup.OnCheckedChangeListener;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TableLayout;

import android.util.Log;
import android.view.View.OnClickListener;
//import android.view.Window;

import android.view.View;
//import android.util.Log;

public class ClassPertanyaan extends Activity {

        EditText pertanyaan_nya = null;
        RadioButton pilihan1 = null;
        RadioButton pilihan2 = null;
        RadioButton pilihan3 = null;
        RadioButton pilihan4 = null;
        RadioGroup semuaJawaban = null;
        Button selesaiJawab = null;
        int urutanPertanyaan = 0;
        //int jumlahEventNya = 0;
        int jawabanYgDiPilih[] = null;
        int jawabanYgBenar[] = null;
        boolean cekPertanyaan = false;
        Button tombolSebelum, tombolBerikut = null;

        @Override
        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.tampilan_pertanyaan);
                
                TableLayout tampilanHalaman = (TableLayout) findViewById(R.id.design_id);
                tampilanHalaman.setVisibility(android.view.View.INVISIBLE);
                
                try {
                        pertanyaan_nya = (EditText) findViewById(R.id.pertanyaan_id);
                        pilihan1 = (RadioButton) findViewById(R.id.jawaban0);
                        pilihan2 = (RadioButton) findViewById(R.id.jawaban1);
                        pilihan3 = (RadioButton) findViewById(R.id.jawaban2);
                        pilihan4 = (RadioButton) findViewById(R.id.jawaban3);
                        semuaJawaban = (RadioGroup) findViewById(R.id.semuaJawaban_id);
                       // RadioGroup tampilanPertanyaan = (RadioGroup)findViewById(R.id.semuaJawaban_id);
                        Button selesaiJawab = (Button)findViewById(R.id.selesai_jawab);
                        selesaiJawab.setOnClickListener(klikSelesai);
                        
                        tombolSebelum = (Button)findViewById(R.id.sebelum_id);
                        tombolSebelum.setOnClickListener(klikSebelum);
                        tombolBerikut = (Button)findViewById(R.id.berikut_id);
                        tombolBerikut.setOnClickListener(klikBerikut);

                        
                        jawabanYgDiPilih = new int[ClassPilihanGanda.tempatDaftarPertanyaan().length()];
                        java.util.Arrays.fill(jawabanYgDiPilih, -1);
                        jawabanYgBenar = new int[ClassPilihanGanda.tempatDaftarPertanyaan().length()];
                        java.util.Arrays.fill(jawabanYgBenar, -1);


                        this.tunjukanPertanyaan(0,cekPertanyaan);

                        tampilanHalaman.setVisibility(android.view.View.VISIBLE);
                        
                } catch (Exception e) {
                        Log.e("", e.getMessage().toString(), e.getCause());
                } 

        }
        
        
  private void tunjukanPertanyaan(int urutan_soal_soal,boolean review) {
                try {
                        JSONObject tunjukan_Object_Nya = ClassPilihanGanda.tempatDaftarPertanyaan().getJSONObject(urutan_soal_soal);
                        String pertanyaan = tunjukan_Object_Nya.getString("Pertanyaan_nya");
                        if (jawabanYgBenar[urutan_soal_soal] == -1) {
                                String pilihanYgBenar = tunjukan_Object_Nya.getString("Jawaban_Yg_Benar");
                                jawabanYgBenar[urutan_soal_soal] = Integer.parseInt(pilihanYgBenar);
                        }
                        
                        pertanyaan_nya.setText(pertanyaan.toCharArray(), 0, pertanyaan.length());
                        semuaJawaban.check(-1);
                        pilihan1.setTextColor(Color.WHITE);
                        pilihan2.setTextColor(Color.WHITE);
                        pilihan3.setTextColor(Color.WHITE);
                        pilihan4.setTextColor(Color.WHITE);
                        JSONArray dariEmpatPilihan = tunjukan_Object_Nya.getJSONArray("PilihanNya");
                        String salahSatuPilihan = dariEmpatPilihan.getJSONObject(0).getString("Pilih");
                        pilihan1.setText(salahSatuPilihan.toCharArray(), 0, salahSatuPilihan.length());
                        salahSatuPilihan = dariEmpatPilihan.getJSONObject(1).getString("Pilih");
                        pilihan2.setText(salahSatuPilihan.toCharArray(), 0, salahSatuPilihan.length());
                        salahSatuPilihan = dariEmpatPilihan.getJSONObject(2).getString("Pilih");
                        pilihan3.setText(salahSatuPilihan.toCharArray(), 0, salahSatuPilihan.length());
                        salahSatuPilihan = dariEmpatPilihan.getJSONObject(3).getString("Pilih");
                        pilihan4.setText(salahSatuPilihan.toCharArray(), 0, salahSatuPilihan.length());
                        Log.d("",jawabanYgDiPilih[urutan_soal_soal]+"");
                        if (jawabanYgDiPilih[urutan_soal_soal] == 0)
                                semuaJawaban.check(R.id.jawaban0);
                        if (jawabanYgDiPilih[urutan_soal_soal] == 1)
                                semuaJawaban.check(R.id.jawaban1);
                        if (jawabanYgDiPilih[urutan_soal_soal] == 2)
                                semuaJawaban.check(R.id.jawaban2);
                        if (jawabanYgDiPilih[urutan_soal_soal] == 3)
                                semuaJawaban.check(R.id.jawaban3);
                        
                        pasangLabelDanNomorUrut();
                        
                        if (urutan_soal_soal == (ClassPilihanGanda.tempatDaftarPertanyaan().length()-1)) 
                                tombolBerikut.setEnabled(false);
                        
                        if (urutan_soal_soal == 0)
                                tombolSebelum.setEnabled(false);
                        
                        if (urutan_soal_soal > 0)
                                tombolSebelum.setEnabled(true);
                        
                        if (urutan_soal_soal < (ClassPilihanGanda.tempatDaftarPertanyaan().length()-1))
                                tombolBerikut.setEnabled(true);

                        
                        if (review) {
                                Log.d("priksa",jawabanYgDiPilih[urutan_soal_soal]+""+jawabanYgBenar[urutan_soal_soal]);;        
     if (jawabanYgDiPilih[urutan_soal_soal] != jawabanYgBenar[urutan_soal_soal]) {
           if (jawabanYgDiPilih[urutan_soal_soal] == 0)
                   pilihan1.setTextColor(Color.RED);
          if (jawabanYgDiPilih[urutan_soal_soal] == 1)
                   pilihan2.setTextColor(Color.RED);
           if (jawabanYgDiPilih[urutan_soal_soal] == 2)
                   pilihan3.setTextColor(Color.RED);
           if (jawabanYgDiPilih[urutan_soal_soal] == 3)
                   pilihan4.setTextColor(Color.RED);
                                }
           if (jawabanYgBenar[urutan_soal_soal] == 0)
                   pilihan1.setTextColor(Color.GREEN);
           if (jawabanYgBenar[urutan_soal_soal] == 1)
                   pilihan2.setTextColor(Color.GREEN);
           if (jawabanYgBenar[urutan_soal_soal] == 2)
                   pilihan3.setTextColor(Color.GREEN);
           if (jawabanYgBenar[urutan_soal_soal] == 3)
                   pilihan4.setTextColor(Color.GREEN);
                        }
                } catch (Exception e) {
                        Log.e(this.getClass().toString(), e.getMessage(), e.getCause());
                }
        }
        

  private OnClickListener klikSelesai = new OnClickListener() {
     public void onClick(View v) {
      aturJawaban_nya();
      //hitung berapa yg benar
           int jumlahJawabanYgBenar = 0;
            for(int i=0; i<jawabanYgBenar.length; i++){
             if ((jawabanYgBenar[i] != -1) && (jawabanYgBenar[i] == jawabanYgDiPilih[i]))
                                        jumlahJawabanYgBenar++;
                        }
              AlertDialog tampilKotakAlert;
              tampilKotakAlert = new AlertDialog.Builder(ClassPertanyaan.this).create();
              tampilKotakAlert.setTitle("Nilai");
             tampilKotakAlert.setMessage((jumlahJawabanYgBenar) +" dari " + (ClassPilihanGanda.tempatDaftarPertanyaan().length()));
                        
     tampilKotakAlert.setButton(AlertDialog.BUTTON_NEUTRAL, "Lagi", new DialogInterface.OnClickListener(){

                                public void onClick(DialogInterface dialog, int which) {
                                        cekPertanyaan = false;
                                        urutanPertanyaan=0;
                                        ClassPertanyaan.this.tunjukanPertanyaan(0, cekPertanyaan);
                                }
                        });

     tampilKotakAlert.setButton(AlertDialog.BUTTON_POSITIVE, "Priksa", new DialogInterface.OnClickListener(){

                                public void onClick(DialogInterface dialog, int which) {
                                        cekPertanyaan = true;
                                        urutanPertanyaan=0;
                                        ClassPertanyaan.this.tunjukanPertanyaan(0, cekPertanyaan);
                                }
                        });

     tampilKotakAlert.setButton(AlertDialog.BUTTON_NEGATIVE,"Keluar", new DialogInterface.OnClickListener(){

                                public void onClick(DialogInterface dialog, int which) {
                                        cekPertanyaan = false;
                                        finish();
                                }
                        });

                        tampilKotakAlert.show();
                        
                }
        };

        private void aturJawaban_nya() {
                if (pilihan1.isChecked())
                        jawabanYgDiPilih[urutanPertanyaan] = 0;
                if (pilihan2.isChecked())
                        jawabanYgDiPilih[urutanPertanyaan] = 1;
                if (pilihan3.isChecked())
                        jawabanYgDiPilih[urutanPertanyaan] = 2;
                if (pilihan4.isChecked())
                        jawabanYgDiPilih[urutanPertanyaan] = 3;
                
                Log.d("",Arrays.toString(jawabanYgDiPilih));
                Log.d("",Arrays.toString(jawabanYgBenar));
                
        }
        
        private OnClickListener klikBerikut = new OnClickListener() {
                public void onClick(View v) {
                 aturJawaban_nya();
                        urutanPertanyaan++;
                        if (urutanPertanyaan >= ClassPilihanGanda.tempatDaftarPertanyaan().length())
                                urutanPertanyaan = ClassPilihanGanda.tempatDaftarPertanyaan().length() - 1;
                        
                        tunjukanPertanyaan(urutanPertanyaan,cekPertanyaan);
                }
        };

        private OnClickListener klikSebelum = new OnClickListener() {
                public void onClick(View v) {
                 aturJawaban_nya();
                        urutanPertanyaan--;
                        if (urutanPertanyaan < 0)
                                urutanPertanyaan = 0;

                        tunjukanPertanyaan(urutanPertanyaan,cekPertanyaan);
                }
        };
        
        private void pasangLabelDanNomorUrut() {
                this.setTitle("KuisBerhadiah     " + (urutanPertanyaan+1)+ " dari " + ClassPilihanGanda.tempatDaftarPertanyaan().length());
        }


}


Lihat pada bagian deklarasi:
        EditText pertanyaan_nya = null;
        RadioButton pilihan1 = null;
        RadioButton pilihan2 = null;
        RadioButton pilihan3 = null;
        RadioButton pilihan4 = null;
        RadioGroup semuaJawaban = null;
        Button selesaiJawab = null;
        int urutanPertanyaan = 0;
        //int jumlahEventNya = 0;
        int jawabanYgDiPilih[] = null;
        int jawabanYgBenar[] = null;
        boolean cekPertanyaan = false;
        Button tombolSebelum, tombolBerikut = null;
Note: definisi null adalah sangat komplex, silahkan google null di internet dan anda akan mendapatkan berbagai jawaban yang kesemuanya dapat di perdebatkan kebenaran-nya.
Secara sederhana 'null' mirip dengan nol tapi bedanya adalah nol masih ada bentuknya(object_nya) yaitu '0' sedangkan eksistensi null adalah ia tak mempunyai bentuk dan tak punya nilai, ia ada tapi tak ada,
'null' bagaikan oksigen yang memberikan kehidupan kepada obyek yang menggunakan-nya. Tanpa 'null' maka object-object tersebut tak ada logika komputasi sehingga tak bisa di program. 
Tapi dengan memberi nilai 'null' maka obyek-obyek tersebut seakan bernyawa dan menjadi hidup sehingga menjadi di kenal oleh bahasa programan. Wilayah 'null' kemungkinan akan di isi oleh sesuatu seperti, kemungkinan akan di klik untuk memilih pilihan yang benar atau di isi dengan sesuatu dan masih banyak kemungkinan lainnya TAPI wilayah 'null' tidak di klik atau di isi sekarang. Ia seperti ruangan kosong tapi tidak kosong(bingung? join the club karena kita sama2 bingung kawan.. tapi untuk sekarang terimalah 'null' apa adanya ok).
Perhatikan pada kode selanjutnya setelah obyek2 tersebut di hidupkan, android dengan gampang memanggil namanya masing2 untuk di program sesuai kemauan programmer-nya.
Sedangkan object yang memiliki nilai seperti =  0; maksudnya agar berurutan dari awal karena nomor pertama dalam bahasa programan adalah = 0; bukan = 1;
= false kebanyakan di pasang pada data yang berjenis boolean (yang berarti boleh ia boleh juga tidak) tapi datanya tidak dipasang sekarang.
Berbeda dengan kebalikan-nya = true; yang berarti iya silahkan langsung di pasang.
Pada kode di atas, saya ingin agar semua pertanyaan akan di cek kebenaran-nya tapi bukan sekarang tapi tunggu sampai selesai menyelesaikan menjawab so'al pada aplikasi sehingga untuk sementara 'cekPertanyaan = false;'


Kalau semua file pendukung aplikasi ini semuanya di lengkapi lalu di install ke HP maka kode di atas akan menghasilkan aplikasi 'pilihan ganda' yang mungkin cocok di pakai untuk ujian praktek sebelum ujian benaran berlangsung dan hasil outputnya akan terlihat sbb:
Gambar 1
Aplikasinya bisa maju mundur untuk lihat2 pertanyaan. Tekan berhenti kapan saja untuk melihat pilhannya berapa yang benar dan berapa yang salah, dan kalau semuanya salah atau belum memilih pilihan a, b, c  atau d  maka akan keluar '0 dari 31 maksudnya belum melakukan pilihan atau mungkin dari 31 pertanyaan semuanya salah, seperti terlihat gambar berikut:
Gambar 2
31 adalah jumlah so'al pilihan ganda yang ada dalam aplikasi, ( bisa di masukan pertanyaan sebanyaknya).
15 adalah no urut pertanyaan yang sedang di tunjukan di layar sekarang.
Tekan "Lagi" akan memulai pilhan ganda dari awal
Tekan "Keluar" akan keluar dari aplikasi
Tekan 'Priksa' akan priksa kebenaran dari jawaban.. yang benar akan di tandai warna hijau dan yang salah akan di tandai warna merah sbb:
Gambar 3
Gambar 3 di atas adalah hasil kerja dari kode berikut:
if (review) {
                                Log.d("priksa",jawabanYgDiPilih[urutan_soal_soal]+""+jawabanYgBenar[urutan_soal_soal]);;        
     if (jawabanYgDiPilih[urutan_soal_soal] != jawabanYgBenar[urutan_soal_soal]) {
           if (jawabanYgDiPilih[urutan_soal_soal] == 0)
                   pilihan1.setTextColor(Color.RED);
          if (jawabanYgDiPilih[urutan_soal_soal] == 1)
                   pilihan2.setTextColor(Color.RED);
           if (jawabanYgDiPilih[urutan_soal_soal] == 2)
                   pilihan3.setTextColor(Color.RED);
           if (jawabanYgDiPilih[urutan_soal_soal] == 3)
                   pilihan4.setTextColor(Color.RED);
                                }
           if (jawabanYgBenar[urutan_soal_soal] == 0)
                   pilihan1.setTextColor(Color.GREEN);
           if (jawabanYgBenar[urutan_soal_soal] == 1)
                   pilihan2.setTextColor(Color.GREEN);
           if (jawabanYgBenar[urutan_soal_soal] == 2)
                   pilihan3.setTextColor(Color.GREEN);
           if (jawabanYgBenar[urutan_soal_soal] == 3)
                   pilihan4.setTextColor(Color.GREEN);
                        }
Tanda != dalam bahasa programan berarti 'tidak sama dengan' .... sehingga
if (jawabanYgDiPilih[urutan_soal_soal] != jawabanYgBenar[urutan_soal_soal])
{ jadi kalau jawabanYgDiPilih bukan jawabanYgBenar maka di kasih warna merah-lah } Tapi kalau benar {di tandai oleh warna hijau}

Dimanakah Semua pertanyaan di simpan?


Lihat pada kode bagian berikut:
private void tampilkanPertanyaan() throws Exception {
            try {
                InputStream masukanSemuaPertanyaan = this.getBaseContext().getResources()
                                .openRawResource(R.raw.lembar_pertanyaan);
                bufferReaderNya = new BufferedReader(new InputStreamReader(masukanSemuaPertanyaan));
                StringBuilder barisanPertanyaan = new StringBuilder();
                String barisPilihJawaban = null;
                while ((barisPilihJawaban = bufferReaderNya.readLine()) != null) {
                 barisanPertanyaan.append(barisPilihJawaban);
                }
                Log.d(this.getClass().toString(), barisanPertanyaan.toString());
                JSONObject pertanyaanNya = new JSONObject(barisanPertanyaan.toString());
                daftarPertanyaan = pertanyaanNya.getJSONArray("Semua_Pertanyaan");
                Log.d(this.getClass().getName(),
                                "Jmlh Pertanyaan " + daftarPertanyaan.length());
            } catch (Exception e){
                    
            } finally {
                        try {
                                bufferReaderNya.close();
                        } catch (Exception e) {
                                Log.e("", e.getMessage().toString(), e.getCause());
                        }

            }
            

    }

Halaman yang memuat semua pertanyaan-nya di buat dalam formasi JSON(JavaScript Object Notation) itulah sebabnya mengapa bahasa program java menamakan  classnya JSONObject. Sehinnga pada kode di atas saya deklarasikan class JSONObject untuk menunjukan object-objectnya kedalam aplikasi, dengan metode getJSONArray
Perhatikan kode pada bagian daftarPertanyaan = pertanyaanNya.getJSONArray("Semua_Pertanyaan") 
dan lihat semua pertanyaan bernaung di bawah 'Semua_Pertanyaan' pada file yang berformat JSON.

Semua pertanyaan berada di file bernama 'lembar_pertanyaan.txt'
Lihat
InputStream masukanSemuaPertanyaan = this.getBaseContext().getResources()

                                .openRawResource(R.raw.lembar_pertanyaan);

Semua object yang di panggil pada kode di atas adalah berkaca pada object yang ada pada file JSON yang saya beri nama 'lembar_pertanyaan.txt' seperti terlihat di bawah ini.
Berikut adalah contoh format JSON
{
  "Semua_Pertanyaan": [
    
        {
      "Pertanyaan_nya": "Pilih binatang ampibia ",
      "Jawaban_Yg_Benar": 0,
      "PilihanNya": [
        {
          "Pilih": "katak"
        },
        {
          "Pilih": "Anjing"
        },
        {
          "Pilih": "Kambing"
        },
        {
          "Pilih": "Musang"
        }
      ]
    },
    
        {
      "Pertanyaan_nya": "---- adalah bagian dari atmosfir.",
      "Jawaban_Yg_Benar": 1,
      "PilihanNya": [
        {
          "Pilih": "Unisfir"
        },
        {
          "Pilih": "Troposfir"
        },
        {
          "Pilih": "Oxisfir"
        },
        {
          "Pilih": "Karbosfir"
        }
      ]
    },
    
           {
      "Pertanyaan_nya": "binatang apa yang termasuk unggas?",
      "Jawaban_Yg_Benar": 0,
      "PilihanNya": [
        {
          "Pilih": "ayam"
        },
        {
          "Pilih": "anjing"
        },
        {
          "Pilih": "kambing"
        },
        {
          "Pilih": "kucing"
        }
      ]
    },
    
      {
      "Pertanyaan_nya": "Suhu di ukur dengan ",
      "Jawaban_Yg_Benar": 2,
      "PilihanNya": [
        {
          "Pilih": "meter"
        },
        {
          "Pilih": "kilogram"
        },
        {
          "Pilih": "Selsius"
        },
        {
          "Pilih": "Senti meter"
        }
      ]
    }
]
}
    
Jadi semua kode dalam aplikasi ini bersumber pada object yang ada di dalam halaman JSON, sehingga pengenalan object adalah suatu keharusan.... saya lapar lagi, akan di sambung stay tune yah