我们已经看到借助Volley请求借助Android中的GET请求从API读取数据。借助GET Request,我们可以JSON格式显示来自API的数据,并在我们的应用程序中使用该数据。在本文中,我们将使用Android Volley库中的POST请求,将数据发布到API。
我们将在本文中构建什么?
我们将构建一个简单的应用程序,其中将显示两个EditText字段,并显示名称和工作,并将从用户那里获取该数据并将其发布到我们的API中。为此,我们正在使用一个需要API的示例,该API可免费用于测试。下面提供了一个示例视频,以使您对我们在本文中将要做的事情有个大概的了解。注意,我们将使用Java语言实现该项目。
数据可以以XML,Form和JSON等不同格式添加到API。大多数API以JSON格式发布其数据。因此,我们还将以JSON对象的形式将数据发布到我们的API。
分步实施
步骤1:创建一个新项目
要在Android Studio中创建新项目,请参阅如何在Android Studio中创建/启动新项目。请注意,选择Java作为编程语言。
步骤2:在您的build.gradle文件中添加以下依赖项
以下是Volley的依赖关系,我们将使用它们来从API获取数据。要添加此依赖关系,请导航至应用程序> Gradle脚本> build.gradle(app),然后在“依赖关系”部分添加以下依赖关系。
implementation ‘com.android.volley:volley:1.1.1’
添加此依赖项后,同步您的项目,现在移至AndroidManifest.xml部分。
步骤3:在AndroidManifest.xml文件中向Internet添加权限
导航至应用程序> AndroidManifest.xml,然后将以下代码添加到其中。
XML
XML
Java
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() {
@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 passing our response
// to json object to extract data from it.
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");
// 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();
}
}) {
@Override
protected Map getParams() {
// below line we are creating a map for
// storing our values in key and value pair.
Map params = new HashMap();
// 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);
}
}
步骤4:使用activity_main.xml文件
导航到应用程序> res>布局> activity_main.xml,然后将以下代码添加到该文件中。以下是activity_main.xml文件的代码。
XML格式
步骤5:使用MainActivity。 Java文件
转到MainActivity。 Java文件并参考以下代码。下面是MainActivity的代码。 Java文件。在代码内部添加了注释,以更详细地了解代码。
Java
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() {
@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 passing our response
// to json object to extract data from it.
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");
// 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();
}
}) {
@Override
protected Map getParams() {
// below line we are creating a map for
// storing our values in key and value pair.
Map params = new HashMap();
// 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);
}
}
现在运行您的应用程序,并通过添加数据来查看应用程序的输出。