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数据请求后的空对象的主要内容,如果未能解决你的问题,请参考以下文章