如何在 Android 中使用 Volley 发起同步请求?
什么是 Android 中的同步请求
对于希望从服务器检索数据并立即在应用程序中使用的开发者来说,在 Android 应用中使用 Volley 发起同步请求非常有用。这对于从远程服务器加载图像或数据等任务非常有用。在本文中,我们将讨论如何在 Android 应用中使用 Volley 发起同步请求。
在 Android 中实现同步请求
我们将创建一个简单的应用程序,其中只显示两个文本视图。在第一个文本视图中,我们将显示应用程序的标题;在第二个文本视图中,我们将显示 API 调用的响应。
步骤 1:在 Android Studio 中创建新项目
按照以下屏幕所示导航到 Android Studio。在下面的屏幕中,点击"新建项目"即可创建一个新的 Android Studio 项目。
点击"新建项目"后,您将看到以下屏幕。
在此屏幕中,我们只需选择"空活动"并点击"下一步"。点击"下一步"后,您将看到以下屏幕。
在此屏幕中,我们只需指定项目名称。然后,软件包名称将自动生成。
注意 − 请确保选择 Java 作为语言。 指定所有详细信息后,点击"完成"即可创建一个新的 Android Studio 项目。
项目创建完成后,我们将看到两个打开的文件,即 activity_main.xml 和 MainActivity.java。
步骤 2:在 build.gradle 文件中添加依赖项以使用此库
导航至 Gradle Scripts>build.gradle 文件,并在依赖项部分添加以下依赖项。
implementation 'com.android.volley:volley:1.2.1'
在依赖项部分,我们将添加一个依赖项,用于从 API 调用中获取数据,并将其加载到我们的应用程序中。
添加上述依赖项后,您将在 IDE 的右上角看到"立即同步"选项。只需点击它即可同步您的项目并在项目中安装此依赖项。
步骤 3:使用 activity_main.xml
导航到 activity_main.xml。如果此文件不可见,请打开此文件。在左侧窗格中,导航至 app>res>layout>activity_main.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="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<!-- on below line creating a text view for displaying a heading-->
<TextView
android:id="@+id/idTVHeading"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_above="@id/idTVMsg"
android:layout_margin="10dp"
android:padding="4dp"
android:text="Synchronous Request in Android App with Volley"
android:textAlignment="center"
android:textColor="@color/black"
android:textSize="20sp"
android:textStyle="bold" />
<!-- on below line creating a text view for displaying a message from API call-->
<TextView
android:id="@+id/idTVMsg"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:textAlignment="center"
android:textColor="@color/black"
android:textSize="18sp" />
</RelativeLayout>
说明 - 在上述代码中,根元素是 Android 中的相对布局。此布局是一个视图组,用于将其中的所有元素彼此对齐。我们可以借助 ID 或位置来相对对齐相对布局中的所有元素。
在这个相对布局中,我们创建了两个文本视图。第一个文本视图用于显示应用程序的标题。在第二个文本视图中,我们将显示应用程序内 API 调用的响应。
步骤 4:在 AndroidManifest.xml 文件中添加互联网权限
由于我们使用 URL 从互联网获取数据,因此我们必须在 Android 应用程序中添加互联网权限才能访问互联网并加载这些数据。因此,我们必须添加互联网权限。添加互联网权限。导航至 app>AndroidManifest.xml 文件,并在 application 标签上方添加以下权限。
<uses-permission android:name="android.permission.INTERNET"/>
步骤 7:使用 MainActivity.java
导航至 MainActivity.java。如果此文件不可见,请打开此文件。在左侧窗格中,导航至 app>java>您的应用包名称>MainActivity.java 以打开此文件。打开此文件后,向其中添加以下代码。代码中添加了注释,以便您详细了解。
package com.example.androidjavaapp;
import androidx.appcompat.app.AppCompatActivity;
import android.content.ContextWrapper;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.JsonObjectRequest;
import com.android.volley.toolbox.RequestFuture;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.concurrent.TimeUnit;
public class MainActivity extends AppCompatActivity {
// 在下面一行创建变量
private TextView msgTV;
String url = "https://www.jsonkeeper.com/b/N6XK";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 下面一行使用 id 初始化 web 视图。
msgTV = findViewById(R.id.idTVMsg);
// 下面一行我们创建一个 json 对象请求,并指定方法名称为 get,以及我们发出请求的 url
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
// 在响应方法中,我们将响应数据设置到我们的文本视图。
try {
msgTV.setText(response.getString("message"));
} catch (JSONException e) {
// 下面一行处理错误。
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// 在下一行显示错误的提示消息。
Toast.makeText(MainActivity.this, "Error : " + error, Toast.LENGTH_SHORT).show();
}
});
// 在下面一行将请求添加到 volley 请求队列。
Volley.newRequestQueue(getApplicationContext()).add(jsonObjectRequest);
}
}
说明 - 在上述 MainActivity.java 文件的代码中,我们首先为文本视图创建一个变量,用于显示文本消息。然后,我们创建一个字符串变量,并在其中添加一个 URL,通过该 URL 获取 JSON 响应。
现在我们来看一下 onCreate 方法。这是每个 Android 应用程序的默认方法。创建应用程序视图时会调用此方法。在此方法中,我们设置内容视图,即名为 activity_main.xml 的布局文件,以便从该文件设置 UI。
指定视图后,我们使用在 activity_main.xml 文件中提供的唯一 ID 初始化文本视图。
初始化变量后,我们发出一个 JSON 对象请求。在此方法中,我们发出一个 get 请求,并将需要发出请求的 URL 传递给它。在 onresponse 方法中,我们解析 JSON 响应并将其设置到文本视图中。之后,我们还创建了一个错误监听器方法。在该方法中,当收到任何错误时,我们会显示一条 Toast 消息。最后,我们将这个 JSON 对象请求添加到队列中以执行它。
添加上述代码后,现在只需点击顶部栏中的绿色图标即可在移动设备上运行我们的应用程序。
注意 - 确保您已连接到真实设备或模拟器。
输出
结论
在上面的教程中,我们学习了如何使用 Volley 作为库在 Android 应用程序中发出同步请求。

