JSON?
JSON (Javascript Object Notation) merupakan format pertukaran data yang ringan, mudah dibaca dan ditulis oleh manusia.
JSON dipakai untuk dua hal; yang pertama untuk format transfer data antar device/OS/bahasa pemrograman yang berbeda dan sebagai media penyimpanan.
untuk apa JSON ini dalam pengembangan aplikasi Android ?
Dalam aplikasi Android, terkadang kita memerlukan suatu data yang berasal dari suatu server untuk digunakan dan ditampilkan dalam aplikasi kita. Nah, untuk mengambil data dari server kita bisa memakai yang namanya API (Application Programming Interface).
Dalam penyaluran data dari server ke client(aplikasi kita) memerlukan sebuah standar pemformatan data, nah disinilah kita pakai JSON.
Kelebihan JSON
Walaupun XML sudah sejak lama dipakai dalam format transfer data, namun beberapa tahun terakhir, JSON menggeser posisi XML. Kelebihan JSON dari XML adalah sbb:
- Ukuran lebih kecil dibanding XML, efeknya transfer data lebih cepat dan lebih hemat resource, terutama bandwidth
- JSON adalah format data bawaan di Javascript, artinya jike data dari server di kirim ke client , dan client menggunakan javascript, maka tidak perlu library tambahan untuk memprosesnya
- Dibanding XML, format JSON lebih sederhana.
- library JSON ada di setiap bahasa pemrograman sehingga memudahkan programer yang berbeda bahasa pemrograman.
Tipe Data JSON
Objek. Objek merupakan kumpulan pasangan key dan value yang diapit dengan kurung buka dan kurung tutup (seperti penjelasan sebelumnya). Karena objek ini mencerminkan associative array, maka direkomendasikan agar tidak menggunakan key dengan nilai sama (key sebaiknya unik). Objek ini boleh bernilai kosong dan cukup ditulis {}
Number. Number berupa digit 0-9 dan ditulis apa adanya tanpa perlu menggunakan tanda kutip. Number dapat berupa bilangan bulat maupun desimal. Untuk desimal, karakter yang digunakan adalah titik bukan koma. Misal untuk menuliskan dua koma lima, bentuk angkanya adalah 2.5 bukan 2,5
Boelan. Boelan berupa teks true dan false tanpa tanda kutip.
Null. Null berupa teks null dan ditulis langsung tanpa tanda kutip.
String. String berupa semua karakter Unicode yang artinya semua karakter yang ada di dunia ini. String ini merupakan tipe data yang paling sering digunakan, dalam penulisannya, string harus diapit dengan dua tanda kutip ( ” ) tidak boleh menggunakan satu tanda kutip ( ‘ ) atau tidak menggunakan tanda kutip sama sekali
.
File JSON terdiri dari banyak komponen antara lain :
- Array ([)
Dalam file JSON, tanda kurung siku ([) mewakili larik JSON
Contoh : [“Senin”,”Selasa”,”Rabu”,”Kamis”,”Jumat”,”Sabtu”]
- Objek ({)
Dalam file JSON, kurung kurawal ({) mewakili objek JSON
Contoh : { “Pegawai”:{“nama”:”Joni”,”Gaji”:5000000,”Status”:”menikah”,”WNI”:true}}
Perbedaan JSONArray dan JSONObject
Dalam JSON, ada dua hal penting yang harus kita ketahui dan harus tahu membedakannya, yaitu JSONArray dan JSONObject. JSONArray di dalam JSON di representasikan dengan tanda [ (Square Brackets), sedangkan JSONObject di representasikan dengan tanda } (Curly Brackets). Dalam implementasi kodingan java-nya, jika JSONArray kita gunakan method getJSONArray(), kalau JSONObject kita gunakan method getJSONObject().
- Kunci
Objek JSON berisi kunci yang hanya berupa string. Pasangan kunci / nilai membentuk objek JSON
- Nilai
Setiap kunci memiliki nilai yang bisa berupa string, integer atau dobel dll
METODE-METODE JSON PARSER
Untuk mem-parsing objek JSON, kita akan membuat objek kelas JSONObject dan tentukan string yang berisi data JSON. Sintaksnya adalah –
String in;JSONObject reader = new JSONObject(in);
Langkah terakhir adalah mengurai JSON. File JSON terdiri dari objek yang berbeda dengan pasangan kunci / nilai yang berbeda dll. Jadi JSONObject memiliki fungsi terpisah untuk mengurai setiap komponen file JSON. Sintaksnya diberikan di bawah ini –
JSONObject sys = reader.getJSONObject(“sys”);
country = sys.getString(“country”);
JSONObject main = reader.getJSONObject(“main”);
temperature = main.getString(“temp”);
Metode getJSONObject mengembalikan objek JSON. Metode getString mengembalikan nilai string kunci yang ditentukan.
Terlepas dari metode ini, ada metode lain yang disediakan oleh kelas ini untuk file Parsing JSON yang lebih baik. Metode-metode ini tercantum di bawah :
Sr.No | Method & description |
1 | get(String name)
Metode ini hanya Mengembalikan nilai tetapi dalam bentuk jenis Objek |
2 | getBoolean(String name)
Metode ini mengembalikan nilai boolean yang ditentukan oleh kunci |
3 | getDouble(String name)
Metode ini mengembalikan nilai ganda yang ditentukan oleh kunci |
4 | getInt(String name)
Metode ini mengembalikan nilai integer yang ditentukan oleh kunci |
LIBRARY JSON
Retrofit merupakan library android yang dibuat oleh Square yang digunakan sebagai REST Client pada Android, yang pasti akan memudahkan kita. Karena kita tidak perlu lagi untuk membuat method-method sendiri untuk menggunakan REST Client API dari backend. Library ini menyediakan framework yang powerfull untuk authenticating dan berinteraksi dengan API dengan mengirimkan request menggunakan OkHTTP.
Beberapa alasan mengapa retrofit populer diantaranya yaitu :
- Retrofit merupakan library yang simple untuk meng-organize API calls.
- Konsep annotation akan membuat codingan kita lebih rapih dan enak dipandang
- Retrofit bisa memakai OkHttpsebagai Http client-nya
- Retrofit men-support RxJava.
- Retrofit men-support penggunaan GSONdan Jackson.
Volley merupakan sebuah library HTTP yang diperkenalkan oleh Google untuk mempermudah pertukaran data dan membuat koneksi jaringan antara android dengan HTTP menjadi lebih mudah tanpa harus membuat deretan kode yang sangat panjang. Secara default volley menggunakan metode sinkronisasi jadi anda tidak perlu membuat sebuah method atau fungsi yang menggunakan class asynctask.
- Melakukan sebuah request queuing and prioritization (Mengutamakan prioritas dalam sebuah antrian).
- Sangat efektif untuk melakukan chace dan efesiensi penyimpanan (memory)
- Dapat melakukan perubahan class sesuai dengan kebutuhan
- Dapat melakukan pembatalan dalam sebuah request.
Berikut adalah perbandingan Retrofit dan Volley secara detail:
Kemudahan Penggunaan | Performa dan Caching | POST requests | |
Retrofit | Retrofit sangat mudah digunakan. Memungkinkan anda untuk memakai API ini dengan method sederhana dari java menggunakan interface. | Caching harusnya bisa berjalan jika server anda menetapkan header control yang benar. Jika tidak ,atau anda melakukan sesuatu yang tidak biasa anda hanya bisa mengubah lapisan klien HTTP anda | Memiliki dukungan penuh untuk permintaan POST dan upload file yang multi, dengan API Sweet untuk boot |
Volley | Sedikit lebih rumit pada umumnya. Volley hanya mendukung beberapa response yaitu String,Image,JSONObject dan JSONArray. | Memiliki mekasnisme chacing yang lebih rumit dan fleksibel, memanfaatkan untuk membuat caching bitmaps yang lebih besar | Support POST request tetapi anda harus convert terlebih dahulu java objek yang kita buat menjadi JSONObject. |
adalah sebuah library sama seperti library lainya namun perbedaanya yaitu library ini memiliki banyak fitur yang tidak ada di library Retrofit. Dan tentunya lebih lengkap dibandingkan Retrofit maupun Volley. Library ini mendukung semua jenis HTTP/HTTPS permintaan seperti GET, POST, DELETE, HEAD, PUT, PATCH.
Keuntungan menggunakan library Fast Android Networking di atas library lain:
- OkHttpClient dapat disesuaikan untuk setiap permintaan dengan mudah – seperti penyesuaian waktu habis, dll untuk setiap permintaan.
- Lebih cepat, karena menggunakan OkHttpClient dan Okio.
- Satu library untuk semua jenis jaringan – unduh, unggah, multipart.
- Mendukung JSON Parsing ke Java Objects (juga mendukung Jackson Parser).
- Analisis lengkap tentang permintaan apa pun dapat diperoleh. Anda dapat mengetahui byte yang dikirim, byte yang diterima, dan waktu yang dibutuhkan untuk setiap permintaan. Analisis ini penting agar Anda dapat menemukan penggunaan data dari aplikasi Anda dan waktu yang diambil untuk setiap permintaan, sehingga Anda dapat mengidentifikasi permintaan yang lambat.
- Anda dapat memperoleh bandwidth dan kualitas koneksi saat ini untuk menulis kode logis yang lebih baik – mengunduh gambar berkualitas tinggi dengan kualitas koneksi yang sangat baik dan rendah pada kualitas koneksi yang buruk.
- Prefetching dari setiap permintaan dapat dilakukan sehingga memberikan data instan ketika diperlukan dari cache.
- Semua jenis kustomisasi dimungkinkan.
- Antarmuka sederhana untuk membuat jenis permintaan apa pun.
- Mendukung RxJava.
- GSON
GSON adalah library java yang digunakan untuk meng-convert objek java ke JSON atau sebaliknya. GSON memiliki fungsi serialization dan deserialization. Serialization berfungsi merubah JSON string menjadi objek java, sedangkan deserialization berfungsi merubah objek java menjadi bentuk JSON. Serialization dan deserialization di GSON menggunakan fungsi fromJson() dan toJson(). GSON memberikan manfaat tambahan dukungan penuh untuk Java Generics, dan itu tidak mengharuskan Anda untuk menganotasi kelas Anda. Tidak perlu menambahkan anotasi untuk penerapan yang lebih mudah dan bahkan bisa menjadi persyaratan jika Anda tidak memiliki akses ke kode sumber Anda.
- Jackson
Jackson adalah sekelompok alat pengolah data yang disorot oleh streaming parser dan pustaka generator JSON. Didesain untuk Java, ia juga dapat menangani pengkodean non-JSON lainnya.
- JSONP
JSONP (JSON Processing) adalah Java API untuk pemrosesan JSON, yaitu seputar mengkonsumsi dan memproduksi streaming teks JSON. Ini adalah implementasi referensi open source dari JSR353.
Membuat Projek Sederhana APlikasi Android Parsing JSON
Pada tutorial Kali ini Kita akan membuat projek Sederhana yang mana akan digunakan untuk menampilkan Data dari database menggunakan JSON
Sebelum kita memulai Membuat Projek androidnya Siapkan terlebih dahulu webservicenya , Kami menggunakan Codeigniter dan library REST untuk membuat webservicenya
Untuk tutorial membuat REST API dengan CodeIgniter dapat dilihat pada Postingan Ini
Untuk Struktur Tabelnya pada database Kurang-lebih seperti gambar dibawah:
Tbl_kelompok
Kemudian function Pada Rest Controller Untuk Menampilkan data pada database menjadi JSON
function index_get() {
$this->db->order_by(“id”, “desc”); $data_kelompok = $this->db->get(‘tbl_kelompok’)->result();
if ($data_kelompok) {
$this->set_response($data_kelompok,REST_Controller::HTTP_OK);
}else {
$this->set_response([‘status’ => ‘200’,’data’ => $data_kelompok,’message’=>”succesfull “],REST_Controller::HTTP_OK); }
return $data_kelompok;
}
Dan untuk Output masing-masing Method yaitu
- Method GET (mengambil data dari database)
http://www.noobdev.biz/index.php/Api/pmo2/Buku/delete/1
Hasil Outputnya akan menjadi seperti dibawah
[
{
“nama”: “Trian damai”,
“nim”: “16.11.0180”,
“kelas”: “TI 16 B”,
“email”: “trian_damai@outlook.com”,
“id”: “12”
},
{
“nama”: “Teguh Mardiono”,
“nim”: “16.11.0195”,
“kelas”: “TI16A”,
“email”: “teguhd77@gmail.com”,
“id”: “11”
}
]
dimana yang akan digunakan untuk Mendapatkan data JSON nya
Pertama-tama Kita akan menggunakan library Retrofit dan Okhttp untuk parsing JSON
Penjelasannya Retrofit dapat di askses di https://square.github.io/retrofit/
Penjelasan Okhhtp dapat diakses di http://square.github.io/okhttp/
Kemudian hasil dari jsonnya akan kita tampilkan kedalam Recyclerview
Kita Buat Dulu Projeknya pada Android Studio pada menu
File -> new -> Project
Kemudian tinggal Next dan pilih Empty Activity dan Hasil Projek awalnya akan menjadi seperti ini
Buka File build.gradle untuk menambahkan dependencies Retrofit,Okhttp,Recyclerview
//recyclerview
implementation ‘com.android.support:design:28.0.0’
implementation “com.android.support:recyclerview-v7:28.0.0”//cardview
implementation ‘com.android.support:cardview-v7:28.0.0’//retrofit
implementation ‘com.squareup.retrofit2:retrofit:2.0.2’
implementation ‘com.squareup.retrofit2:converter-gson:2.0.2’
implementation ‘com.squareup.okhttp3:logging-interceptor:3.4.1’
Selanjutnya Kita Buat Desain dari activity_main.xml Seperti Dibawah
Palette | id |
FloatingActionButton | fab_tambah |
ProgressBar | progress |
RecyclerView | rv_kelompok |
SwipeRefreshLayout | refresh_layout |
Kemudian Kita Membuat Sebuat Layout Baru dengan Nama rv_item_kelompok.xml yang akan digunakan untuk mengisi Item pada RecyclerVIew
palette | Id |
TextView | txt_nim |
CardView | parent_item |
TextView | txt_nama |
TextView | Txt_kelas |
TextView | Txt_email |
Pertama kita akan Membuat Class DataModel yang nantinya kan menjadi model sesuai data JSON yang ada seperti dibawah
Dan Untuk Class Modelnya Kita Buat
Kelompok_Model.java
public class Kelompok_Model { @SerializedName("nama") @Expose private String nama; @SerializedName("nim") @Expose private String nim; @SerializedName("kelas") @Expose private String kelas; @SerializedName("email") @Expose private String email; @SerializedName("id") @Expose private String id; public String getNama() { return nama; } public void setNama(String nama) { this.nama = nama; } public String getNim() { return nim; } public void setNim(String nim) { this.nim = nim; } public String getKelas() { return kelas; } public void setKelas(String kelas) { this.kelas = kelas; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getId() { return id; } public void setId(String id) { this.id = id; } }
Selnjutnya Membuat Class RetrofitClient
RetrofitClient.java
public class RetroFitApiClient { private static Retrofit retrofit=null; public static Retrofit getClient(String baseUrl){ //CertificatePinner certificatePinner = new CertificatePinner.Builder().add("noobdev.biz","cca52_8f791_fe2325e4237ed4bcfc0348f60c942f4c").build(); HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor(); interceptor.setLevel(HttpLoggingInterceptor.Level.BODY); OkHttpClient client = new OkHttpClient.Builder() .addInterceptor(interceptor) //.certificatePinner(certificatePinner) .build(); if (retrofit==null){ retrofit = new Retrofit.Builder() .baseUrl(baseUrl) .addConverterFactory(GsonConverterFactory.create()) .client(client) .build(); } return retrofit; } }
Kemudian membuat Class baru
UtilsApi.java
public class UtilsApi { public static final String BASE_URL_API ="http://www.noobdev.biz/index.php/Api/pmo2/"; //public static final String BASE_URL_API ="http://www.noobjr.tk/index.php/"; //deklarasi apiinterface public static InterfaceApi getApiSerivce() { return RetroFitApiClient.getClient(BASE_URL_API).create(InterfaceApi.class); } }
Kemudian Membuat Class interface baru
InterfaceApi.java
public interface InterfaceApi { @GET("Buku") Call<List<Kelompok_Model>> getkelompok(); }
Selanjutnya Membuat Class Adapter sebagai Adapter RecyclerView
Kelompok_Get.java
public class Kelompok_Get extends RecyclerView.Adapter<Kelompok_Get.ViewHolder> { List<Kelompok_Model> kelompok_modelList; Context context; ProgressDialog dialog; InterfaceApi mApiService; public Kelompok_Get(List<Kelompok_Model> kelList, Context context){ this.kelompok_modelList = kelList; this.context = context; } @Override public Kelompok_Get.ViewHolder onCreateViewHolder( ViewGroup viewGroup, int i) { View itemview = LayoutInflater.from(viewGroup.getContext()) .inflate(R.layout.item_rv_kelompok,viewGroup,false); return new ViewHolder(itemview); } @Override public void onBindViewHolder(Kelompok_Get.ViewHolder holder,int posisi) { final Kelompok_Model model = kelompok_modelList.get(posisi); final Dialog mydialog = new Dialog(context); mydialog.setContentView(R.layout.dialog_detail); dialog = new ProgressDialog(context); dialog.setMessage("Memproses..."); dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); dialog.setIndeterminate(true); com.example.nurizkillah.pmo_rps_4.customfonts.MyTextView_Roboto_Bold nama = mydialog.findViewById(R.id.txt_nama); com.example.nurizkillah.pmo_rps_4.customfonts.MyTextView_Roboto_Bold nim = mydialog.findViewById(R.id.txt_nim); com.example.nurizkillah.pmo_rps_4.customfonts.MyTextView_Roboto_Bold kelas = mydialog.findViewById(R.id.txt_kelas); com.example.nurizkillah.pmo_rps_4.customfonts.MyTextView_Roboto_Bold email = mydialog.findViewById(R.id.txt_email); Button tambah = mydialog.findViewById(R.id.btn_tambah); Button ubah = mydialog.findViewById(R.id.btn_update); Button hapus = mydialog.findViewById(R.id.btn_hapus); holder.parent.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mydialog.show(); } }); hapus.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { dialog.show(); mApiService = UtilsApi.getApiSerivce(); mApiService.delete(model.getId(),"coba").enqueue(new Callback<ResponseBody>() { @Override public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) { if (response.isSuccessful()){ notifyDataSetChanged(); dialog.hide(); Toast.makeText(context,"Berhasil",Toast.LENGTH_LONG).show(); mydialog.hide(); } } @Override public void onFailure(Call<ResponseBody> call, Throwable t) { } }); } }); ubah.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { context.startActivity(new Intent(context, Ubah.class) .putExtra("id",model.getId()) .putExtra("nama",model.getNama()) .putExtra("nim",model.getNim()) .putExtra("kelas",model.getKelas()) .putExtra("email",model.getEmail())); mydialog.hide(); } }); nama.setText ("Nama :"+model.getNama()); nim.setText ("Nim :"+model.getNim()); kelas.setText("Kelas :"+model.getKelas()); email.setText("Email :"+model.getEmail()); holder.nim.setText(model.getNim()); } @Override public int getItemCount() { return kelompok_modelList.size(); } public class ViewHolder extends RecyclerView.ViewHolder{ com.example.nurizkillah.pmo_rps_4.customfonts.MyTextView_Roboto_Bold id,nama,nim,kelas,email; Button delete; CardView parent; public ViewHolder(View view){ super(view); nim = itemView.findViewById(R.id.txt_nim); parent = itemView.findViewById(R.id.parent_item); } } }
Kemudian Pada MainActivity.java
public class MainActivity extends AppCompatActivity implements View.OnClickListener { RecyclerView rv; SwipeRefreshLayout refreshLayout; ProgressBar progress; FloatingActionButton fab; ProgressDialog dialog; List<Kelompok_Model> modellist; List<Kelompok_Model> arraymodel = new ArrayList<>(); com.example.nurizkillah.pmo_rps_4.customfonts.MyTextView_Roboto_Bold tool,cek; InterfaceApi mApiService; Kelompok_Get adapter; boolean refresh = false; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); rv = findViewById(R.id.rv_kelompok); refreshLayout = findViewById(R.id.refresh_layout); progress = findViewById(R.id.progress); fab = findViewById(R.id.fab_tambah); cek = findViewById(R.id.cekref); tool = findViewById(R.id.txt_toolbar); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { Window window = getWindow(); window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); window.setStatusBarColor(Color.WHITE); } tool.setText("DAFTAR MAHASISWA"); fab.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { startActivity(new Intent(MainActivity.this,Tambah.class)); } }); daftar(); refreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { @Override public void onRefresh() { refreshLayout.setRefreshing(false); daftar(); //arraymodel.clear(); } }); refreshLayout.setColorSchemeResources(R.color.colorPrimary, android.R.color.holo_green_dark, android.R.color.holo_orange_dark, android.R.color.holo_blue_dark); } private void daftar() { RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(MainActivity.this); rv.setLayoutManager(layoutManager); new dapatdata().execute(); arraymodel.clear(); } @Override protected void onResume() { super.onResume(); adapter.notifyDataSetChanged(); arraymodel.clear(); } @Override public void onClick(View v) { switch (v.getId()){ } } private class dapatdata extends AsyncTask<Void,Void,Void>{ @Override protected void onPreExecute() { super.onPreExecute(); //progress dialog dialog = new ProgressDialog(MainActivity.this); dialog.setMessage("Silahkan Tunggu"); dialog.setCancelable(false); dialog.show(); } @Override protected Void doInBackground(Void... voids) { adapter = new Kelompok_Get(arraymodel,MainActivity.this); rv.setItemAnimator(new DefaultItemAnimator()); rv.setAdapter(adapter); mApiService = UtilsApi.getApiSerivce(); rv.invalidate(); mApiService.getkelompok() .enqueue(new Callback<List<Kelompok_Model>>() { @Override public void onResponse(Call<List<Kelompok_Model>> call, Response<List<Kelompok_Model>> response) { if (response.isSuccessful()){ cek.setText("Tarik Kebawah Untuk Refresh"); progress.setVisibility(View.GONE); refreshLayout.setRefreshing(false); try { if (response == null){ Toast.makeText(MainActivity.this,"Hmm...Mungkin Datanya Kosong",Toast.LENGTH_LONG).show(); }else { dialog.dismiss(); Kelompok_Model model = new Kelompok_Model(); List<Kelompok_Model> models = response.body(); arraymodel.addAll(models); adapter.notifyDataSetChanged(); //arraymodel.clear(); } }catch (Exception e){ Toast.makeText(MainActivity.this,"Sepertinya Terjadi Sesuatu"+"\n"+e.getMessage(),Toast.LENGTH_LONG).show(); } }else { Toast.makeText(MainActivity.this,"Gagal Merespon ",Toast.LENGTH_LONG).show(); } } @Override public void onFailure(Call<List<Kelompok_Model>> call, Throwable t) { Toast.makeText(MainActivity.this,"Gagal Menghubungi Server :( ",Toast.LENGTH_LONG).show(); cek.setText("data tidak Ada Silahkan Tarik Kebawah Untuk Refresh"); refreshLayout.setRefreshing(false); } }); return null; } @Override protected void onPostExecute(Void aVoid) { super.onPostExecute(aVoid); if (dialog.isShowing()){ dialog.dismiss(); } arraymodel.clear(); rv.setAdapter(adapter); } } }
Kemudian Kita Run Maka Hasilnya
TAMBAHAN
Sourcecode : PMO2_rps4 PowerPoint: PMO2_KEL3_RPS4 Uraian Lengkap: PMO2_KEL3_RPS4 Webservice: GET(ambil data) http://www.noobdev.biz/index.php/Api/pmo2/Buku POST(tambah data) http://www.noobdev.biz/index.php/Api/pmo2/Buku/tambah @Field("nama") String nama, @Field("nim") String nim, @Field("kelas") String kelas, @Field("email") String email); POST(update data) http://www.noobdev.biz/index.php/Api/pmo2/Buku/update/{id} @Path("id")String id, @Field("nama") String nama, @Field("nim") String nim, @Field("kelas") String kelas, @Field("email") String email); POST(delete data) http://www.noobdev.biz/index.php/Api/pmo2/Buku/delete/{id}@Path("id")String id,
DAFTAR PUSTAKA
https://www.codepolitan.com/mengenal-format-json-59e8152dd0e51
https://www.codepolitan.com/library-yang-wajib-kamu-coba-untuk-membuat-aplikasi-android-59b254b6d153c
http://wimsonevel.blogspot.com/2016/06/tutorial-android-parsing-json-using-gson.html
◎https://www.codepolitan.com/mengenal-format-json-59e8152dd0e51
◎https://www.codepolitan.com/library-yang-wajib-kamu-coba-untuk-membuat-aplikasi-android-59b254b6d153c
◎https://www.gookkis.com/android-network-library-retrofit-rest-api-client-tutorial/
◎http://wimsonevel.blogspot.com/2016/06/tutorial-android-parsing-json-using-gson.html
◎http://www.tutorialspoint.com/android/android_json_parser.htm
◎https://www.journaldev.com/10642/android-jsonobject-json-parsing
◎https://www.journaldev.com/10642/android-jsonobject-json-parsing
◎https://www.candra.web.id/penjelasan-struktur-data-json/
◎http://jagowebdev.com/memahami-json/
◎https://medium.com/@dimasvm/tutorial-android-simple-parsing-json-2215a497c052