簡體   English   中英

使用 Android 從 URL 獲取 JSON 數據響應?

[英]Get JSON Data response from URL using Android?

我正在嘗試從 URL 獲得 JSON 響應。 我已經多次嘗試下面的代碼,但我無法得到響應。 請幫我解決這個問題

我正在使用 API 級別 29

這里我使用這個 url 來獲取數據,url -> https://api.androidhive.info/contacts/

我的代碼:

public class MainActivity extends AppCompatActivity {

    private final static String URL = "https://api.androidhive.info/contacts/";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        RequestQueue queue = Volley.newRequestQueue(this);

        JsonArrayRequest arrayRequest = new JsonArrayRequest(
                Request.Method.GET, URL,null,new Response.Listener<JSONArray>() {
            @Override
            public void onResponse(JSONArray response) {
                Log.d("Response : ", response.toString());
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                VolleyLog.d("Error : ", error.getMessage());
            }
        });
        queue.add(arrayRequest);
    }
}

AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.volleyparsing">

    <uses-permission android:name="android.permission.INTERNET"/>

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

Logcat 響應:

2020-05-03 22:19:49.600 11515-11515/? I/e.volleyparsin: Not late-enabling -Xcheck:jni (already on)
2020-05-03 22:19:49.749 11515-11515/? E/e.volleyparsin: Unknown bits set in runtime_flags: 0x8000
2020-05-03 22:19:53.066 11515-11515/com.example.volleyparsing D/Volley: [2] 2.onErrorResponse: Error :
2020-05-03 22:19:50.513 11515-11545/com.example.volleyparsing W/libc: Unable to set property "qemu.gles" to "1": connection failed; errno=13 (Permission denied)

您的響應是 jsonObject 而不是 jsonArray。 這就是你得到解析錯誤的方式。 使用 jsonObject:

RequestQueue queue = Volley.newRequestQueue(context);

    JsonObjectRequest objectRequest = new JsonObjectRequest(
            Request.Method.GET, URL, null, new Response.Listener<JSONObject>() {
        @Override
        public void onResponse(JSONObject response) {
            JSONArray jsonArray = null;
            try {
                jsonArray = response.getJSONArray("contacts");
                Log.d("Response : ", jsonArray.toString());
            } catch (JSONException e) {
                e.printStackTrace();
            }

        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            VolleyLog.d("Error : ", error.getMessage());
        }
    });

    queue.add(objectRequest);   

在應用程序的清單文件中使用 android:usesCleartextTraffic="true"。

  <application
    ...
    android:usesCleartextTraffic="true"
    ... >

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM