【问题标题】:null object after JSON data requestJSON数据请求后的空对象
【发布时间】: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) {

        }
    });

【问题讨论】:

    标签: java android json android-volley


    【解决方案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() 之前)。跨度>
    猜你喜欢
    • 2016-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-18
    • 2018-11-13
    • 2015-02-12
    • 1970-01-01
    • 2017-09-18
    相关资源
    最近更新 更多