同一个活动Android Studio中的两个JSON解析方法

Posted

技术标签:

【中文标题】同一个活动Android Studio中的两个JSON解析方法【英文标题】:Two JSON parse method with volley within the same activity Android Studio 【发布时间】:2021-09-24 00:50:46 【问题描述】:

我一直在使用 volley 库在我的 android 活动中使用来自 URL 的 JSON 对象请求。我的活动流程应该 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.access$4400(MainActivity.java:111)
        at com.example.jsonparsetest.MainActivity$23.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)

【问题讨论】:

【参考方案1】:

在您使用的第二种方法 JsonParseSecond() mQueueTwo.add(requestTwo);

当你声明 私有请求队列 mQueueSecond;

还将请求队列初始化为

mQueueSecond = Volley.newRequestQueue(mContext);

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

【讨论】:

谢谢!我忘了初始化第二个请求队列。

以上是关于同一个活动Android Studio中的两个JSON解析方法的主要内容,如果未能解决你的问题,请参考以下文章

Android Studio 中的新活动无法启动

在测验中的最后一个问题之后转到 Android Studio 中的另一个活动

如何在进入不同活动的情况下不删除 Android Studio 活动中的变量?

Android Studio 升级中的“未找到默认活动”

什么是 android studio 中的片段活动?

如何根据 android studio 中的 listview 项目点击更改活动图像和文本? java 或 kotlin