Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从不同类调用时,Volley响应返回null_Java_Android_Json_Android Volley - Fatal编程技术网

Java 从不同类调用时,Volley响应返回null

Java 从不同类调用时,Volley响应返回null,java,android,json,android-volley,Java,Android,Json,Android Volley,我对android开发相当陌生。 我试图通过使用不同的类来调用API并使用全局应用程序类来存储响应,然后在API调用后调用应用程序对象来存储JSON响应,从而模块化当前项目。 然而,当我试图从API类中创建的应用程序对象获取JSON响应时,应用程序崩溃了。在思考代码一段时间后,我尝试在API类本身中检查返回的API响应,一次在onResponse方法中,一次在类结束之前检查。我看到该方法中的API响应非常好,但在调用方法的末尾附近调用时,该响应为null。 为什么我不能从API类本身正确更新JS

我对android开发相当陌生。 我试图通过使用不同的类来调用API并使用全局应用程序类来存储响应,然后在API调用后调用应用程序对象来存储JSON响应,从而模块化当前项目。
然而,当我试图从API类中创建的应用程序对象获取JSON响应时,应用程序崩溃了。在思考代码一段时间后,我尝试在API类本身中检查返回的API响应,一次在
onResponse
方法中,一次在类结束之前检查。我看到该方法中的API响应非常好,但在调用方法的末尾附近调用时,该响应为null。
为什么我不能从API类本身正确更新JSON响应?如果可以,怎么做?
提前谢谢三,

下面是我遇到问题的类和方法的代码

APICall.java

GlobalData.java

MainActivity.java➡️ setUI()


你的电话可能还没打完。执行调用并立即检查数据是否已返回。但是您需要在响应回调中异步处理检查(在您的例子中,它是
response->{data.setResponse(response);}
public class APICall
{
    public RequestQueue mRequestQueue;
    GlobalData data;


    public void call(Application application)
    {
        String API = application.getResources().getString(R.string.BASE_API);
        data = (GlobalData) application;

        JsonObjectRequest apiRequest = new JsonObjectRequest(
                Request.Method.GET,
                API,
                null,
                response -> {
                    Log.i("API Response", response.toString());
                    data.setResponse(response);
                },
                error -> error.printStackTrace()
        );

        mRequestQueue.add(apiRequest);
        Log.i("API Response recheck", data.getResponse().toString());
    }
}
public class GlobalData extends Application
{
    private JSONObject response;

    public JSONObject getResponse() {
        return response;
    }

    public void setResponse(JSONObject response) {
        this.response = response;
    }
}
public void setUI()
    {

        apiCall = new APICall();
        apiCall.mRequestQueue = Volley.newRequestQueue(getApplicationContext());

        apiCall.call(this.getApplication());
        JSONObject apiResponse = data.getResponse();

        ImageView memeView = findViewById(R.id.meme_view);
        TextView caption = findViewById(R.id.caption);

        data = (GlobalData) getApplication();
        Log.i("API Response in Main", apiResponse.toString());

    }