Using Post Method Send data to server and Retrieve Data from Server :
Activity Main.XML Code :
<?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>
Activity Main.java Activity code :
package com.like.exampleofvollygetreqest;
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 com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.HashMap;
import java.util.Map;
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.
postDataUsingVolley(nameEdt.getText().toString(), jobEdt.getText().toString());
}
});
}
private void postDataUsingVolley(String name, String job) {
// url to post our data
String url = "https://reqres.in/api/users";
loadingPB.setVisibility(View.VISIBLE);
// creating a new variable for our request queue
RequestQueue queue = Volley.newRequestQueue(MainActivity.this);
// on below line we are calling a string
// request method to post the data to our API
// in this we are calling a post method.
StringRequest request = new StringRequest(Request.Method.POST,
url, new com.android.volley.Response.Listener<String>() {
@Override
public void onResponse(String response) {
// inside on response method we are hiding our progress bar;
// and setting data to edit text as empty
loadingPB.setVisibility(View.GONE);
nameEdt.setText("");
jobEdt.setText("");
// on below line we are displaying a success toast message.
Toast.makeText(MainActivity.this, "Data added to API", Toast.LENGTH_SHORT).show();
try {
// on below line we are parsing the responsee to json object to extract data from that json object and show on textView.
JSONObject respObj = new JSONObject(response);
// below are the strings which we extract from our json object.
String name = respObj.getString("name");
String job = respObj.getString("job");
//now our responce come from server ;
// on below line we are setting this string s to our text view.
responseTV.setText("Name : " + name + "\n" + "Job : " + job);
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new com.android.volley.Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// method to handle errors.
Toast.makeText(MainActivity.this, "Fail to get response = " + error, Toast.LENGTH_SHORT).show();
}
}) {
//note : The paramenters can be set in a volley request by overriding getParams() method of Request<T> class.
// But the problem is that the getParams() is called only in the case of POST or PUT request. As the documentation says:
@Override
protected Map<String, String> getParams() {
// below line we are creating a map for storing our values in key and value pair.
Map<String, String> params = new HashMap<String, String>();
// on below line we are passing our key and value pair to our parameters.
params.put("name", name);
params.put("job", job);
// at last we are
// returning our params.
return params;
}
};
// below line is to make
// a json object request.
queue.add(request);
}
}