Skip to main content

How to call Post type API using Retrofit in Android?

Step by Step Implementation

Step 1: Create a New Project


Step 2: Add the below dependency in your build.gradle file


Navigate to the Gradle Scripts > build.gradle(Module:app) and add the below dependency in the dependencies section. 


// below dependency for using the retrofit

implementation ‘com.squareup.retrofit2:retrofit:2.9.0’

implementation ‘com.squareup.retrofit2:converter-gson:2.5.0’



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. 


<!--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 version="1.0" encoding="utf-8"?> 

<LinearLayout

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:orientation="vertical"

tools:context=".MainActivity"> 


<!--edit text field for adding name-->

<EditText

android:id="@+id/idEdtName"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_margin="10dp"

android:layout_marginTop="40dp"

android:hint="Enter your name" /> 


<!--edit text for adding job-->

<EditText

android:id="@+id/idEdtJob"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_margin="10dp"

android:hint="Enter your job" /> 


<!--button for adding data-->

<Button

android:id="@+id/idBtnPost"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_margin="20dp"

android:text="Send Data to API"

android:textAllCaps="false" /> 


<!--text view for displaying our API response-->

<TextView

android:id="@+id/idTVResponse"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_margin="10dp"

android:gravity="center_horizontal"

android:text="Response"

android:textAlignment="center"

android:textSize="15sp" /> 


<!--progress bar for loading -->

<ProgressBar

android:id="@+id/idLoadingPB"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_gravity="center"

android:visibility="gone" /> 


</LinearLayout>


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 DataModal and add the below code to it. Comments are added inside the code to understand the code in more detail.


public class DataModal { 

// string variables for our name and job 

private String name; 

private String job; 


public DataModal(String name, String job) { 

this.name = name; 

this.job = job; 


public String getName() { 

return name; 


public void setName(String name) { 

this.name = name; 


public String getJob() { 

return job; 


public void setJob(String job) { 

this.job = job; 

}


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.


import retrofit2.Call; 

import retrofit2.http.Body; 

import retrofit2.http.POST; 


public interface RetrofitAPI { 

// as we are making a post request to post a data 

// so we are annotating it with post 

// and along with that we are passing a parameter as users 

@POST("users") 

//on below line we are creating a method to post our data. 

Call<DataModal> createPost(@Body DataModal dataModal); 

}


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.


import android.os.Bundle; 

import android.view.View; 

import android.widget.Button; 

import android.widget.EditText; 

import android.widget.ProgressBar; 

import android.widget.TextView; 

import android.widget.Toast; 


import androidx.appcompat.app.AppCompatActivity; 


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 edittext, 

// button, textview and progressbar. 

private EditText nameEdt, jobEdt; 

private Button postDataBtn; 

private TextView responseTV; 

private ProgressBar loadingPB; 


@Override

protected void onCreate(Bundle savedInstanceState) { 

super.onCreate(savedInstanceState); 

setContentView(R.layout.activity_main); 

// initializing our views 

nameEdt = findViewById(R.id.idEdtName); 

jobEdt = findViewById(R.id.idEdtJob); 

postDataBtn = findViewById(R.id.idBtnPost); 

responseTV = findViewById(R.id.idTVResponse); 

loadingPB = findViewById(R.id.idLoadingPB); 

// adding on click listener to our button. 

postDataBtn.setOnClickListener(new View.OnClickListener() { 

@Override

public void onClick(View v) { 

// validating if the text field is empty or not. 

if (nameEdt.getText().toString().isEmpty() && jobEdt.getText().toString().isEmpty()) { 

Toast.makeText(MainActivity.this, "Please enter both the values", Toast.LENGTH_SHORT).show(); 

return; 

// calling a method to post the data and passing our name and job. 

postData(nameEdt.getText().toString(), jobEdt.getText().toString()); 

}); 


private void postData(String name, String job) { 

// below line is for displaying our progress bar. 

loadingPB.setVisibility(View.VISIBLE); 

// on below line we are creating a retrofit 

// builder and passing our base url 

Retrofit retrofit = new Retrofit.Builder() 

.baseUrl("https://reqres.in/api/") 

// as we are sending data in json format so 

// we have to add 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); 

// passing data from our text fields to our modal class. 

DataModal modal = new DataModal(name, job); 

// calling a method to create a post and passing our modal class. 

Call<DataModal> call = retrofitAPI.createPost(modal); 

// on below line we are executing our method. 

call.enqueue(new Callback<DataModal>() { 

@Override

public void onResponse(Call<DataModal> call, Response<DataModal> response) { 

// this method is called when we get response from our api. 

Toast.makeText(MainActivity.this, "Data added to API", Toast.LENGTH_SHORT).show(); 

// below line is for hiding our progress bar. 

loadingPB.setVisibility(View.GONE); 

// on below line we are setting empty text 

// to our both edit text. 

jobEdt.setText(""); 

nameEdt.setText(""); 

// we are getting response from our body 

// and passing it to our modal class. 

DataModal responseFromAPI = response.body(); 

// on below line we are getting our data from modal class and adding it to our string. 

String responseString = "Response Code : " + response.code() + "\nName : " + responseFromAPI.getName() + "\n" + "Job : " + responseFromAPI.getJob(); 

// below line we are setting our 

// string to our text view. 

responseTV.setText(responseString); 


@Override

public void onFailure(Call<DataModal> call, Throwable t) { 

// setting text to our text view when 

// we get error response from API. 

responseTV.setText("Error found is : " + t.getMessage()); 

}); 

}

Comments

Popular posts from this blog

How to make a 'SET SELECTION' in spinner if you have a model type array list data in android kotlin?

 //if a have a value like 'Item 3' need to set selection   val spinnerItemValue="Item 3"//some country name //find the index of the item with the target text val position = arrayList!!.indexOfFirst { it.countryName(//Note: model key which store the country   name for spinner dorp-down)==spinnerItemValue}  //set the selection in the spinner  if(position>=0){       //if you user data binding in your project        binding.countrySpinner.setSelection(position)     //if you use findViewById() in your project       Spinner countrySpinner=findViewById(R.id.countrySpinner)       countrySpinner.setSelection(position) }

What is the Core Building Blocks of Android?

The core building blocks or fundamental components of android are activities, views, intents, services, content providers, fragments and AndroidManifest. Activity: An activity is a class that represents a single screen in application. View: A view is the User Interface element such as button, label, text field etc. Anything that you see is a view. Intent: Intent is used to invoke components. It is mainly used to: => Start the service => Launch an activity => Display a web page => Display a list of contacts => Broadcast a message => Dial a phone call etc. For Example:     Intent intent=new Intent(Intent.ACTION_VIEW);       intent.setData(Uri.parse(" https://moonyincoding.blogspot.com "));       startActivity(intent);    Service: Service is a background process that can run for a long time.  Content Provider: Content Providers are used to share data between the applications.  Fragment: Fragments ...

Retrofit 2 — Receive Plain-String Responses

Android apps usually interact with REST APIs, which often use JSON as a data format. We've focused almost all of our tutorials on sending JSON or XML requests, and converting JSON or XML responses. Scalars Converter for Plain Strings To receive plain-text or plain-string responses you can utilize the scalars converter. You can integrate the converter by adding it as a dependency to your app's build.gradle: dependencies {       implementation 'com.squareup.retrofit2:retrofit:2.9.0'     implementation 'com.squareup.retrofit2:converter-gson:2.9.0'     implementation 'com.squareup.retrofit2:converter-scalars:2.5.0'//You need to add this     implementation 'com.squareup.okhttp3:logging-interceptor:5.0.0-alpha.2' } Next, you need to describe the endpoint you want to interact with. In this demo case, you'll use a GET request with the dynamic URL feature to pass any URL to the method, and set the response type as String. @GET() Call<String...