JSON数据请求后的空对象

Posted

技术标签:

【中文标题】JSON数据请求后的空对象【英文标题】:null object after JSON data request 【发布时间】:2021-11-01 09:44:20 【问题描述】:

我正在编写一个代码,我使用 Volley 库从 url 请求 JSON 对象。在我的 MainActivity 中,我需要使用这个 JSON 对象,所以我需要等待响应准备好,然后再继续编写代码。为此,我使用我在 MainActivity 和 AppController 中定义的 ProcessFinished 方法实现了一个接口。即使这样,在我的主活动中尝试调用请求的对象时我仍然遇到错误。以下是所用代码的摘录:

public class GetData

    public String loadAllData(final DataAsyncResponse callBack)
    AppController.getInstance().addToRequestQueue(jsonObjectRequest);

    return mydata;


public interface DataAsyncResponse 

    void processFinished(String mydata);


在我的 ActivityMain 中:

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

    data = new GetData().loadAllData(new DataAsyncResponse() 
        @Override
        public void processFinished(String mydata) 

        
    );

【问题讨论】:

【参考方案1】:

您需要在processFinished() 回调中设置data 的值。您现在设置它的方式将不起作用,因为此时该值尚未准备好。虽然很难说,因为您没有包含所有代码,但这样的事情应该可以工作:

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    new GetData().loadAllData(new DataAsyncResponse() 
        @Override
        public void processFinished(String mydata) 
            data = myData;
        
    );

【讨论】:

感谢您的回答。这也不起作用,因为我只能在 processFinished 方法中使用数据。我需要在 MainActivity 代码的许多部分使用数据。还有其他方法吗? 您刚刚发现了异步编程的困难。无论您使用data 做什么,都需要在processFinished() 中进行。这就是它的工作原理。您可以将data 设置为可从MainActivity 中的任何位置访问的全局变量,但是您必须决定当它为空时如何处理它(如在调用processFinished() 之前)。跨度>

以上是关于JSON数据请求后的空对象的主要内容,如果未能解决你的问题,请参考以下文章

Alamofire 请求后的空结果

React fetch post 请求中的空属性和值

Spyne:为啥我收到 json 请求的空响应?

jQuery JSON ajax 请求上的空请求正文

如何将json POST数据作为对象传递给Web API方法?

Django - ajax 请求中的空会话数据