Tutorial Parsing Data JSON dengan Retrofit

Android 8 Feb 2016

Tutorial Parsing Data JSON dengan Retrofit. Retrofit adalah Rest Client untuk android dan java dari squareup. Pada tutorial ini kita akan membuat aplikasi android untuk menjelaskan penggunaan HTTP GET REQUEST menggunakan library retrofit. Untuk tutorial retrofit ini, kita menggunakan data json yang sederhana dari web API.

http://api.teknorial.com/contohjson/

{  
    "admin": { 
       	 "id"  :1,
      	  "nama":"Reza Maulana",  
      	  "email":"[email protected]",
      	  "alamat":"Jl. Sukandroid ", 
     	  "status":"Aktif" 
    }  
}

Kita sudah melihat data admin dari json,sekarang kita akan mencoba mengambil data ini dengan aplikasi kita menggunakan library retrofit.

Tutorial Retrofit dengan Android Studio

1. Buat Project android baru.
2. Import Retrofit 2.0 dan converter-gson di build.gradle dalam dependencies.

compile 'com.squareup.retrofit2:retrofit:2.0.0-beta4'
compile 'com.squareup.retrofit2:converter-gson:2.0.0-beta4'


3. Tambahkan internet permission di AndroidManifest.xml

<uses-permission android:name="android.permission.INTERNET"/>

4. Buatlah package baru dengan nama models. Dengan menggunakan retrofit kita tidak perlu parsing sendiri, kita perlu membuat model agar retrofit dapat melakukan parsing dengan library nya. Ada dua cara membuat model yaitu dengan cara manual dan otomatis. Cara manual bisa dipelajari di tutorial ini dan cara otomatis bisa menggunakan jsonschema2pojo, pastekan kode json dari http://api.teknorial.com/contohjson/ ke dalam jsonscheme2pojo seperti gambar berikut
otomatis dengan jsontopojo baruKemudian klik preview untuk mengecek hasil generate ,download zip dan masukan kedalam package models seperti gambar berikut.
models retrofit
note : Ketika kita menggunakan code hasil generate dari jsonschematopojo, kita melihat error seperti gambar berikut
annotation error
Secara default javax.annotation tidak ada di library android, tapi kita bisa menambahkannya di dependency

provided 'org.glassfish:javax.annotation:10.0-b28'

,tetapi kamu bisa menghapus annotation dan menggunakan hasil generate itu.
[AdSense-A]
5. Buat Interface untuk menghandel request kita. Saya membuatnya dengan nama RestApi.java.

package com.teknorial.retrofit2tutorial.rest;

import com.teknorial.retrofit2tutorial.models.Models;

import retrofit2.Call;
import retrofit2.http.GET;

/**
 * Created by Teknorial on 06/02/2016.
 */
public interface RestApi {

    @GET("contohjson")
    Call<Models> getDataAdmin();
}

6. Buka activity_main.xml dan modifikasi seperti berikut.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.teknorial.retrofit2tutorial.MainActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:text="ID"
        android:id="@+id/txt_id"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:text="Nama"
        android:id="@+id/txt_nama"
        android:layout_below="@+id/txt_id"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:text="Email"
        android:id="@+id/txt_email"
        android:layout_below="@+id/txt_nama"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:text="Alamat"
        android:id="@+id/txt_alamat"
        android:layout_below="@+id/txt_email"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:text="Status"
        android:id="@+id/txt_status"
        android:layout_below="@+id/txt_alamat"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />
</RelativeLayout>

 
7. Buka MainActivity.java dan modifikasi seperti berikut.

package com.teknorial.retrofit2tutorial;

import android.app.ProgressDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;

import com.teknorial.retrofit2tutorial.models.Models;
import com.teknorial.retrofit2tutorial.rest.RestApi;

import retrofit2.Call;
import retrofit2.Callback;

import retrofit2.Response;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;

public class MainActivity extends AppCompatActivity {
//ROOT_URL dari web service
public static final String ROOT_URL = "http://api.teknorial.com/";

//definisi tampilan
private  TextView txt_id;
private  TextView txt_nama;
private  TextView txt_email;
private  TextView txt_alamat;
private  TextView txt_status;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

         txt_id = (TextView) findViewById(R.id.txt_id);
         txt_nama = (TextView) findViewById(R.id.txt_nama);
         txt_email = (TextView) findViewById(R.id.txt_email);
         txt_alamat =(TextView) findViewById(R.id.txt_alamat);
         txt_status = (TextView) findViewById(R.id.txt_status);

        //Memanggil method untuk mengambil data
        getData();

    }
    private void getData(){
        //ketika aplikasi sedang mengambil data kita akan melihat progress dialog muncul
        final ProgressDialog loading = ProgressDialog.show(this, "Fetching Data","Please wait..",false,false);

        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(ROOT_URL)
                .addConverterFactory(GsonConverterFactory.create())//GsonConverter untuk parsing json
                .build();
        RestApi service = retrofit.create(RestApi.class);
        Call<Models> call = service.getDataAdmin();
        call.enqueue(new Callback<Models>() { //Asyncronous Request
            @Override
            public void onResponse(Call<Models> call, Response<Models> response) {
                try {
                    loading.dismiss(); //progress dialog dihentikan

                    //dapatkan hasil parsing dari method response.body()
                    String id = response.body().getAdmin().getId().toString();
                    String nama = response.body().getAdmin().getNama();
                    String email = response.body().getAdmin().getEmail();
                    String alamat = response.body().getAdmin().getAlamat();
                    String status = response.body().getAdmin().getStatus();

                  

                    txt_id.setText("ID : "+ id);
                    txt_nama.setText("Nama : "+nama);
                    txt_email.setText("Email : "+email);
                    txt_alamat.setText("Alamat : "+alamat);
                    txt_status.setText("Status : "+status );
                }catch (Exception e){
                    e.printStackTrace();
                }
            }

            @Override
            public void onFailure(Call<Models> call, Throwable t) {

            }

            }
            );
    }
}

Run Aplikasi yang sudah kita buat dan hasil akan seperti screenshot berikut.
retrofit tutorial on teknorial dot com

Demikian artikel Tutorial Parsing Data JSON dengan Retrofit. Ikuti terus teknorial.com untuk mengetahui banyak hal tentang pemrograman android. Jangan lupa untuk Like Fanspage Teknorial di Facebook dan Google Plus untuk mendapatkan update terbaru dari teknorial.com . Jika ada pertanyaan jangan ragu untuk bertanya dikotak komentar. Terima Kasih

Source Code : https://github.com/rflash95/Retrofit2Tutorial

Referensi
https://github.com/codepath/android_guides/wiki/Consuming-APIs-with-Retrofit
http://inthecheesefactory.com/blog/retrofit-2.0/en
http://square.github.io/retrofit/

Tag