Android Volley NullPointerException没有任何解释

时间:2016-04-29 19:24:36

标签: android nullpointerexception android-volley

我有3个上传图像和在服务器上设置图像名称的功能。问题是,我无法让所有功能同时工作。只有一个函数可以工作,另一个函数抛出一个NullPointerException,它不指向任何特定的东西,只是函数中的第一行。

private void uploadMainImage()
{
    RequestQueue queue = Volley.newRequestQueue(getActivity());
    StringRequest ppRequest = new StringRequest(Request.Method.POST,URL_IMAGE_MAIN , new Response.Listener<String>()
    {
        @Override
        public void onResponse(String response)
        {
            System.out.println("Response[Job Image Main]: " + response.toString());
            uploadThumbImage();
        }

    }, new Response.ErrorListener()
    {
        @Override
        public void onErrorResponse(VolleyError error)
        {
            System.out.println("Job Image profile Error: " + error.getMessage());
            progressDialog.hide();
            progressDialog.dismiss();
        }
    })
    {
        @Override
        protected Map<String, String> getParams()
        {
            Map<String, String> params = new HashMap<String, String>();
            params.put("ImageName",jobID + "-1.jpg");
            params.put("base64", pp_finalImage);
            return params;
        }
    };

    queue.add(ppRequest);
}

private void uploadThumbImage()
{
    RequestQueue queue = Volley.newRequestQueue(getActivity());
    StringRequest ppRequest = new StringRequest(Request.Method.POST,URL_IMAGE_THUMB , new Response.Listener<String>()
    {
        @Override
        public void onResponse(String response)
        {
            System.out.println("Response[Job Image Thumb]: " + response.toString());
            //updateImageName();
        }

    }, new Response.ErrorListener()
    {
        @Override
        public void onErrorResponse(VolleyError error)
        {
            System.out.println("Job Thumb Image profile Error: " + error.getMessage());
            progressDialog.hide();
            progressDialog.dismiss();
        }
    })
    {
        @Override
        protected Map<String, String> getParams()
        {
            Map<String, String> params = new HashMap<String, String>();
            params.put("ImageName",jobID + "-1.jpg");
            params.put("base64", thumb_finalImage);
            return params;
        }
    };

    queue.add(ppRequest);
}

private void updateImageName()
{
    SharedPreferences prefs = getActivity().getSharedPreferences("USER_DETAILS", Context.MODE_PRIVATE);
    String userID = prefs.getString("USER_ID", "NO_SESSION");

    RequestQueue queue = Volley.newRequestQueue(getActivity().getApplicationContext());
    Map<String, String> params = new HashMap<String, String>();
    params.put("postpicture  ", jobID + "-1.jpg");
    params.put("userid", "1");
    params.put("postjobid ", jobID);

    JsonObjectRequest request = new JsonObjectRequest(Request.Method.POST,URL + "updateJobPostImage" ,new JSONObject(params), new Response.Listener<JSONObject>()
    {
        @Override
        public void onResponse(JSONObject response)
        {
            Log.d(LOG_TAG,"Response[Image Name Update Job]: " + response.toString());
            try
            {
                String status = response.getString("result");
                if(status.equals("Success"))
                {
                    progressDialog.hide();
                    progressDialog.dismiss();
                }

                else
                {
                    Log.d(LOG_TAG," Image Name Update Failed, Aborting.");
                    progressDialog.hide();
                    progressDialog.dismiss();
                }
            }

            catch (JSONException e)
            {
                Log.d(LOG_TAG,e.getMessage());
                e.printStackTrace();
            }
        }

    }, new Response.ErrorListener()
    {
        @Override
        public void onErrorResponse(VolleyError error)
        {
            progressDialog.hide();
            progressDialog.dismiss();
            Log.d(LOG_TAG, "Image Name Update Error: " + error.getMessage());
        }
    });

    queue.add(request);
}

这是日志

04-30 00:41:29.074 14041-14041/com.antisaby.trackit E/AndroidRuntime: FATAL EXCEPTION: main
                                                                  Process: com.antisaby.trackit, PID: 14041
                                                                  java.lang.NullPointerException
                                                                      at com.android.volley.toolbox.Volley.newRequestQueue(Volley.java:43)
                                                                      at com.android.volley.toolbox.Volley.newRequestQueue(Volley.java:78)
                                                                      at fragments.homefragments.AddServiceFragment.uploadThumbImage(AddServiceFragment.java:397)
                                                                      at fragments.homefragments.AddServiceFragment.access$1100(AddServiceFragment.java:50)
                                                                      at fragments.homefragments.AddServiceFragment$8.onResponse(AddServiceFragment.java:368)
                                                                      at fragments.homefragments.AddServiceFragment$8.onResponse(AddServiceFragment.java:363)
                                                                      at com.android.volley.toolbox.StringRequest.deliverResponse(StringRequest.java:60)
                                                                      at com.android.volley.toolbox.StringRequest.deliverResponse(StringRequest.java:30)
                                                                      at com.android.volley.ExecutorDelivery$ResponseDeliveryRunnable.run(ExecutorDelivery.java:99)
                                                                      at android.os.Handler.handleCallback(Handler.java:808)
                                                                      at android.os.Handler.dispatchMessage(Handler.java:103)
                                                                      at android.os.Looper.loop(Looper.java:193)
                                                                      at android.app.ActivityThread.main(ActivityThread.java:5322)
                                                                      at java.lang.reflect.Method.invokeNative(Native Method)
                                                                      at java.lang.reflect.Method.invoke(Method.java:515)
                                                                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:829)
                                                                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:645)

首先执行uploadMainImage函数。如果响应良好,则调用uploadThumbImage。如果uploadThumbImage的结果良好,则调用updateImageName。如果我没有注释掉任何函数,则uploadThumbImage函数中会发生异常。如果我注释掉第一个函数,则在最后一个函数中发生异常。如果我尝试捕获异常,则消息将为null。

1 个答案:

答案 0 :(得分:0)

  

一个关键概念是RequestQueue必须使用Application上下文实例化,而不是Activity上下文。这可确保RequestQueue将持续应用程序的生命周期,而不是每次重新创建活动时重新创建(例如,当用户旋转设备时)。

Source