Android Volley返回空响应

时间:2019-05-04 18:23:41

标签: java android spring-boot android-volley

我已经使用Volley一段时间了,但是最近我遇到了一个错误。我已经尝试了其他问题中提供的许多答案,但我还没有走运。

在我的项目中,我有一个Android应用程序和一个后端服务器。直到我接听为止,所有电话似乎都可以正常工作:

    private void getUserData() {
    APICommunicator apiCommunicator = new APICommunicator();
    Response.Listener responseListener = new Response.Listener<CustomRequest.CustomResponse>() {
        @Override
        public void onResponse(CustomRequest.CustomResponse response) {
            //do something

        }
    };
    Response.ErrorListener errorListener = new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {

                errorTreatment(error.networkResponse.statusCode);

        }
    };
    String email = SharedPreferencesManager.INSTANCE.read(getApplicationContext(), "user_email");
    Context applicationContext = this;
    Map<String, Object> params = new HashMap<>();
    apiCommunicator.getRequest(applicationContext, URL + "/" + email, responseListener, errorListener, params);
}

此调用位于登录后立即访问的onCreate()的{​​{1}}方法中,因此来自Activity的电子邮件不是SharedPreferences(已选中)。问题在于,通常我不时将新版本的后端代码推送到服务器后,调用会返回null。这发生在NullPointerException中;行,我知道尝试/捕获此访问权限将解决此问题,但是我不明白的是为什么服务器运行正常时(通过postgres)我会收到此错误。通常情况下,无需我做任何事情即可解决问题,只需等待一段时间(也许是午休时间)。

我还检查了是否由服务器决定(无明显原因)不回应这些请愿书,但是问题是服务器未收到任何请求,因此我怀疑问题出在我的Android设备上代码。

errorTreatment(error.networkResponse.statusCode)的代码:

APICommunicator

希望你能帮助我。

编辑:堆栈跟踪日志如下

    class APICommunicator {

    private static final String API_URL = BuildConfig.API_ENDPOINT;
    private static final String CONTENT_TYPE = "application/json; charset=utf-8";
    private static final String CHARSET = "utf-8";


    void getRequest(Context context, String url, Response.Listener responseListener, Response.ErrorListener errorListener, final Map<String, Object> params) {
        doRequest(context, Request.Method.GET, url, responseListener, errorListener, params);
    }



    private void doRequest(final Context context, final int method, final String url, final Response.Listener responseListener, final Response.ErrorListener errorListener, final Map<String, Object> params) {
        CustomRequest request = new CustomRequest(method, API_URL + url, responseListener, errorListener) {
            @Override
            public byte[] getBody() {
                try {
                    return new JSONObject(params).toString().getBytes(CHARSET);
                } catch (UnsupportedEncodingException e) {
                    e.printStackTrace();
                    return null;
                }
            }

            @Override
            public Map<String, String> getHeaders() {
                Map<String, String> headers = new HashMap<>();
                String token = SharedPreferencesManager.INSTANCE.read(context, "token");
                if (token != null) headers.put("Authorization", token);
                return headers;
            }

            @Override
            public String getBodyContentType() {
                return CONTENT_TYPE;
            }
        };
        request.setRetryPolicy(new DefaultRetryPolicy(
                10000,
                3,
                DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
        Volley.newRequestQueue(context).add(request);
    }
}

第190行是E/AndroidRuntime: FATAL EXCEPTION: main Process: com.JoanSanchez.project, PID: 13258 java.lang.NullPointerException: Attempt to read from field 'int com.android.volley.NetworkResponse.statusCode' on a null object reference at com.JoanSanchez.project.InsideActivity$3.onErrorResponse(InsideActivity.java:190) at com.android.volley.Request.deliverError(Request.java:617) at com.android.volley.ExecutorDelivery$ResponseDeliveryRunnable.run(ExecutorDelivery.java:104) at android.os.Handler.handleCallback(Handler.java:873) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:193) at android.app.ActivityThread.main(ActivityThread.java:6863) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:537) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)

0 个答案:

没有答案