在同一个 activity Android Studio 中使用 volley 的两个 JSON 解析方法

Two JSON parse method with volley within the same activity Android Studio

我一直在使用 volley 库来使用来自 URL Android activity 中的 JSON 对象请求。我的 activity 流应该 JSON 解析一个 URL,并得到一个数组,其中包含另一个 URL。然后我想再次解析这第二个 URL 并得到新的数组。但是当我尝试进行第二个 JSON 解析时出现错误。这是我尝试过的代码以及我收到的错误:

非常感谢您的帮助。非常感谢!

private RequestQueue mQueue;
private RequestQueue mQueueSecond;
private String linkDetails;

btnParseOne.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                JsonParse();
            }
        });
btnParseTwo.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                JsonParseSecond();
            }
        });

private void JsonParse() {

        String url = link;

        JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, url, null,
                new Response.Listener<JSONObject>() {
                    @Override
                    public void onResponse(JSONObject response) {
                        try {
                            JSONArray groups = response.getJSONArray("results");
                            if(groups.length() > 0) {
                                 JSONObject result = groups.getJSONObject(0);
                                 linkDetails = result.getString("link");
                            }
                        catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                error.printStackTrace();
            }
        });
        mQueue.add(request);
}

private void JsonParseSecond() {

        String urlDetails = linkDetails;
        Log.d(TAG, "JsonParseSecond: new url to be parsed is: " + urlDetails); //Just to check that I got the new link from the first JsonParse method

        JsonObjectRequest requestTwo = new JsonObjectRequest(Request.Method.GET, urlDetails, null,
                new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject response) {
            Log.d(TAG, "JsonParseSecond: Checking that the JsonParseSecond can do JsonObjectRequest with no issue");
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                error.printStackTrace();
            }
        });
        mQueueTwo.add(requestTwo);

我可以 运行 通过单击 btnParseOne 的按钮来使用 JsonParse() 的第一个方法,没有任何问题。然后在单击 btnParseOne 之后,我单击 btnParseTwo 来检查我的 JsonParseSecond() 方法。但是我收到以下错误:

2021-07-15 12:08:20.551 12739-12739/com.example.jsonparsetest E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.jsonparsetest, PID: 12739
    java.lang.NullPointerException: Attempt to invoke virtual method 'com.android.volley.Request com.android.volley.RequestQueue.add(com.android.volley.Request)' on a null object reference
        at com.example.jsonparsetest.MainActivity.JsonParseSecond(MainActivity.java:1666)
        at com.example.jsonparsetest.MainActivity.access00(MainActivity.java:111)
        at com.example.jsonparsetest.MainActivity.onClick(MainActivity.java:1593)
        at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:174)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:223)
        at android.app.ActivityThread.main(ActivityThread.java:7656)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)

第二种方法JsonParseSecond()你用过
mQueueTwo.add(requestTwo);

当你声明时 私人请求队列 mQueueSecond;

也将请求队列初始化为

mQueueSecond = Volley.newRequestQueue(mContext);

然后替换mQueueTwo.add(requestTwo);用 mQueueSecond.add(requestTwo);