如何在 Android 中使用 Volley 進行同步請求?


什麼是 Android 中的同步請求

在 Android 應用中使用 Volley 進行同步請求對於希望從伺服器檢索資料並能夠立即在其應用程式中使用它的開發者來說非常有用。這對於從遠端伺服器載入影像或資料等任務很有用。在本文中,我們將討論如何在 Android 應用中使用 Volley 進行同步請求。

在 Android 中實現同步請求

我們將建立一個簡單的應用程式,其中我們將簡單地顯示兩個 TextView。在第一個 TextView 中,我們將顯示應用程式的標題,在第二個 TextView 中,我們將顯示 API 呼叫的響應。

步驟 1:在 Android Studio 中建立一個新專案

導航到 Android Studio,如下面的螢幕所示。在下面的螢幕中,單擊“新建專案”以建立一個新的 Android Studio 專案。

單擊“新建專案”後,您將看到下面的螢幕。

在此螢幕中,我們只需選擇“空活動”並單擊“下一步”。單擊“下一步”後,您將看到下面的螢幕。

在此螢幕中,我們只需指定專案名稱。然後包名將自動生成。

注意 - 確保將語言選擇為 Java。指定所有詳細資訊後,單擊“完成”以建立一個新的 Android Studio 專案。

建立專案後,我們將看到兩個開啟的檔案,即 activity_main.xml 和 MainActivity.java 檔案。

步驟 2:在 build.gradle 檔案中新增依賴項以使用此庫

導航到 Gradle Scripts > build.gradle 檔案,並在 dependencies 部分新增以下依賴項。

implementation 'com.android.volley:volley:1.2.1'

在 dependencies 部分,我們將新增一個依賴項,該依賴項用於從 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 中的 RelativeLayout。此佈局是一個檢視組,用於相對於彼此對齊其中的所有元素。我們可以藉助 ID 或位置在 RelativeLayout 中相對對齊所有元素。

在此 RelativeLayout 中,我們建立了兩個 TextView。第一個 TextView 用於顯示應用程式的標題。在第二個 TextView 中,我們將顯示應用程式中 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 {
   
   // on below line creating a variables
   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);
      
      // on below line initializing web view with id.
      msgTV = findViewById(R.id.idTVMsg);
      
      // on below line we are making a json object request and specifying the method name as get, url on which we are making request
      JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener<JSONObject>() {
         @Override
         public void onResponse(JSONObject response) {
            
            // in on response method we are setting response data to our text view.
               try {
                  msgTV.setText(response.getString("message"));
               } catch (JSONException e) {
                  
                  // on below line handling error.
                  e.printStackTrace();
               }
           }
       }, new Response.ErrorListener() {
          @Override
          public void onErrorResponse(VolleyError error) {
             // on below line displaying toast message for error.
             Toast.makeText(MainActivity.this, "Error : " + error, Toast.LENGTH_SHORT).show();
          }
      });
      // on below line adding request to volley request queue.
      Volley.newRequestQueue(getApplicationContext()).add(jsonObjectRequest);
   }
}

說明 - 在上面針對 MainActivity.java 檔案的程式碼中。首先,我們為 TextView 建立一個變數,在其中顯示文字訊息。之後,我們為字串建立一個變數,在其中新增一個 URL,透過該 URL 我們將獲取 JSON 響應。

現在我們將看到 onCreate 方法。這是每個 Android 應用程式的預設方法。建立應用程式檢視時會呼叫此方法。在此方法內部,我們設定內容檢視,即名為 activity_main.xml 的佈局檔案,以從此檔案中設定 UI。

指定檢視後,我們使用我們在 activity_main.xml 檔案中給出的唯一 ID 初始化 TextView。

初始化變數後,我們進行 JSON 物件請求。在此方法中,我們發出 GET 請求並傳遞要對其發出請求的 URL。在 onResponse 方法中,我們解析 JSON 響應並將其設定為 TextView。之後,我們還建立了一個錯誤偵聽器方法。在其中,當接收到任何錯誤時,我們顯示一個 Toast 訊息。最後,我們將此 JSON 物件請求新增到佇列以執行它。

新增上述程式碼後,現在我們只需單擊頂欄中的綠色圖示即可在移動裝置上執行我們的應用程式。

注意 - 確保您已連線到您的真實裝置或模擬器。

輸出

結論

在上面的教程中,我們瞭解瞭如何使用 Volley 作為庫在 Android 應用程式中進行同步請求。

更新於:2023 年 3 月 30 日

674 次檢視

開啟您的 職業生涯

透過完成課程獲得認證

開始
廣告

© . All rights reserved.