JSON Parsing in Android using Retrofit Library - GeeksforGeeks

23 Nov, 2021
JSON is also known as (JavaScript Object Notation) is a format to exchange the data from the server. The data stored in JSON format is lightweight and easy to handle. With the help of JSON, we can access the data in the form of JsonArray, JsonObject, and JsonStringer. In this article, we will specifically take a look at the implementation of JsonObject using the Retrofit library in Android.  
Note: To parse JSON object in android using Voley library please refer to JSON Parsing in Android using Volley Library
JSON Object: Json Object can be easily identified with “{” braces opening and “}” braces closing. We can fetch data from JSON objects with their key value. From that key, we can access the value of that key.  
We will be building a simple application in which we will be displaying a simple CardView in which we will display a single course that is available on Geeks for Geeks. A sample video is given below to get an idea about what we are going to do in this article. Note that we are going to implement this project using the Java language.  
Below is the JSON object from which we will be displaying the data in our Android App.  
{
 “courseName”:”Fork CPP”,
 “courseimg”:”https://media.geeksforgeeks.org/img-practice/banner/fork-cpp-thumbnail.png”,
 “courseMode”:”Online Batch”,
 “courseTracks”:”6 Tracks”
}
Step 1: Create a New Project
To create a new project in Android Studio please refer to How to Create/Start a New Project in Android Studio. Note that select Java as the programming language.
Step 2: Add the below dependency in your build.gradle file
Below is the dependency for Volley which we will be using to get the data from API. For adding this dependency navigate to the app > Gradle Scripts > build.gradle(app) and add the below dependency in the dependencies section. We have used the Picasso dependency for image loading from the URL.    
// below dependency for using retrofit.
implementation ‘com.squareup.retrofit2:retrofit:2.9.0’
implementation ‘com.squareup.retrofit2:converter-gson:2.5.0’
// below dependency for using picasso image loading library
implementation ‘com.squareup.picasso:picasso:2.71828’
After adding this dependency sync your project and now move towards the AndroidManifest.xml part.  
Step 3: Adding permissions to the internet in the AndroidManifest.xml file
Navigate to the app > AndroidManifest.xml and add the below code to it. 
XML
<!--permissions for INTERNET--><uses-permission android:name="android.permission.INTERNET"/>
Step 4: Working with the activity_main.xml file
Navigate to the app > res > layout > activity_main.xml and add the below code to that file. Below is the code for the activity_main.xml file. 
XML
<?xml version="1.0" encoding="utf-8"?><RelativeLayout     xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:layout_gravity="center"    android:gravity="center"    android:orientation="vertical"    tools:context=".MainActivity">      <androidx.cardview.widget.CardView        android:id="@+id/idCVCourse"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:layout_margin="10dp"        android:elevation="10dp"        android:visibility="gone"        app:cardCornerRadius="8dp">          <LinearLayout            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:orientation="vertical">              <ImageView                android:id="@+id/idIVCourse"                android:layout_width="match_parent"                android:layout_height="300dp"                android:layout_margin="5dp" />              <TextView                android:id="@+id/idTVCourseName"                android:layout_width="match_parent"                android:layout_height="wrap_content"                android:layout_margin="5dp"                android:padding="5dp"                android:text="Course Name "                android:textColor="@color/black"                android:textSize="18sp"                android:textStyle="bold" />              <LinearLayout                android:layout_width="match_parent"                android:layout_height="wrap_content"                android:layout_margin="5dp"                android:orientation="horizontal"                android:weightSum="2">                  <TextView                    android:id="@+id/idTVBatch"                    android:layout_width="0dp"                    android:layout_height="wrap_content"                    android:layout_weight="1"                    android:padding="5dp"                    android:text="Batch"                    android:textColor="@color/black" />                  <TextView                    android:id="@+id/idTVTracks"                    android:layout_width="0dp"                    android:layout_height="wrap_content"                    android:layout_weight="1"                    android:padding="5dp"                    android:text="Tracks"                    android:textColor="@color/black" />              </LinearLayout>          </LinearLayout>      </androidx.cardview.widget.CardView>      <ProgressBar        android:id="@+id/idLoadingPB"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_centerInParent="true"        android:visibility="visible" />      </RelativeLayout>
Step 5: Creating a modal class for storing our data
Navigate to the app > java > your app’s package name > Right-click on it > New > Java class and name it as RecyclerData and add the below code to it. Comments are added inside the code to understand the code in more detail.
Java
public class RecyclerData {    // string variables for our data    // make sure that the variable name     // must be similar to that of key value     // which we are getting from our json file.    private String courseName;    private String courseimg;    private String courseMode;    private String courseTracks;      public String getCourseName() {        return courseName;    }      public void setCourseName(String courseName) {        this.courseName = courseName;    }      public String getCourseimg() {        return courseimg;    }      public void setCourseimg(String courseimg) {        this.courseimg = courseimg;    }      public String getCourseMode() {        return courseMode;    }      public void setCourseMode(String courseMode) {        this.courseMode = courseMode;    }      public String getCourseTracks() {        return courseTracks;    }      public void setCourseTracks(String courseTracks) {        this.courseTracks = courseTracks;    }      public RecyclerData(String courseName, String courseimg, String courseMode, String courseTracks) {        this.courseName = courseName;        this.courseimg = courseimg;        this.courseMode = courseMode;        this.courseTracks = courseTracks;    }}
Step 6: Creating an Interface class for our API Call
Navigate to the app > java > your app’s package name > Right-click on it > New > Java class select it as Interface and name the file as RetrofitAPI and add below code to it. Comments are added inside the code to understand the code in more detail.
Java
import retrofit2.Call;import retrofit2.http.GET;  public interface RetrofitAPI {      // as we are making get request     // so we are displaying GET as annotation.    // and inside we are passing     // last parameter for our url.    @GET("63OH")          // as we are calling data from array    // so we are calling it with json object    // and naming that method as getCourse();    Call<RecyclerData> getCourse();}
Step 7: Working with the MainActivity.java file
Go to the MainActivity.java file and refer to the following code. Below is the code for the MainActivity.java file. Comments are added inside the code to understand the code in more detail.
Java
import android.os.Bundle;import android.view.View;import android.widget.ImageView;import android.widget.ProgressBar;import android.widget.TextView;import android.widget.Toast;  import androidx.appcompat.app.AppCompatActivity;import androidx.cardview.widget.CardView;  import com.squareup.picasso.Picasso;  import retrofit2.Call;import retrofit2.Callback;import retrofit2.Response;import retrofit2.Retrofit;import retrofit2.converter.gson.GsonConverterFactory;  public class MainActivity extends AppCompatActivity {    // creating variables for our textview,    // imageview,cardview and progressbar.    private TextView courseNameTV, courseTracksTV, courseBatchTV;    private ImageView courseIV;    private ProgressBar loadingPB;    private CardView courseCV;      @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);                  // initializing our variables.        loadingPB = findViewById(R.id.idLoadingPB);        courseCV = findViewById(R.id.idCVCourse);        courseNameTV = findViewById(R.id.idTVCourseName);        courseTracksTV = findViewById(R.id.idTVTracks);        courseBatchTV = findViewById(R.id.idTVBatch);        courseIV = findViewById(R.id.idIVCourse);        getCourse();    }      private void getCourse() {          // on below line we are creating a retrofit        // builder and passing our base url        Retrofit retrofit = new Retrofit.Builder()                .baseUrl("https://jsonkeeper.com/b/")                // on below line we are calling add Converter                // factory as GSON converter factory.                .addConverterFactory(GsonConverterFactory.create())                // at last we are building our retrofit builder.                .build();        // below line is to create an instance for our retrofit api class.        RetrofitAPI retrofitAPI = retrofit.create(RetrofitAPI.class);        Call<RecyclerData> call = retrofitAPI.getCourse();        call.enqueue(new Callback<RecyclerData>() {            @Override            public void onResponse(Call<RecyclerData> call, Response<RecyclerData> response) {                if (response.isSuccessful()) {                    // inside the on response method.                    // we are hiding our progress bar.                    loadingPB.setVisibility(View.GONE);                    // in below line we are making our card                    // view visible after we get all the data.                    courseCV.setVisibility(View.VISIBLE);                    RecyclerData modal = response.body();                    // after extracting all the data we are                    // setting that data to all our views.                    courseNameTV.setText(modal.getCourseName());                    courseTracksTV.setText(modal.getCourseTracks());                    courseBatchTV.setText(modal.getCourseMode());                    // we are using picasso to load the image from url.                    Picasso.get().load(modal.getCourseimg()).into(courseIV);                }            }              @Override            public void onFailure(Call<RecyclerData> call, Throwable t) {                // displaying an error message in toast                Toast.makeText(MainActivity.this, "Fail to get the data..", Toast.LENGTH_SHORT).show();            }        });    }}
Now run your app and see the output of the app. 
kapoorsagar226
android
Technical Scripter 2020
Android
Java
Technical Scripter
Java
Android
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Comments
Old Comments
How to Create and Add Data to SQLite Database in Android?
Broadcast Receiver in Android With Example
Android RecyclerView in Kotlin
CardView in Android With Example
Content Providers in Android with Example
Arrays in Java
Split() String method in Java with examples
For-each loop in Java
Reverse a string in Java
Arrays.sort() in Java with examples