2016-04-29 16 views
0

私は画像をアップロードしてサーバー上の画像の名前を設定する3つの関数を持っています。つまり、一度にすべての機能を動作させることはできません。 1つの関数だけが動作し、もう1つはNullPointerExceptionをスローします。これらは、関数内の最初の行だけではなく、何かを指していません。説明なしのAndroid Volley 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になります。

+0

私は 'getActivityは()' nullの場合、この方法 –

+0

の最初の行に ')(' isAddedをチェックし、私はisAdded()関数でそれをチェックし、それはそれの関数でfalseを返すと思います失敗する。理由は何でしょうか?この関数の前にあるすべての関数は機能しますが、コードが単一のフラグメントになっていると、この関数が失敗するのはなぜですか? –

+0

大丈夫私はそれを解決しました。これらの前に別の関数で 'getFragmentManager()。popBackStack(null、FragmentManager.POP_BACK_STACK_INCLUSIVE); 'を呼び出していましたが、削除するのを忘れました。助けてくれてありがとう! –

答えて

0

重要な概念は、RequestQueueをアクティビティコンテキストではなくアプリケーションコンテキストでインスタンス化する必要があるということです。これにより、RequestQueueは、アクティビティが再作成されるたびに(ユーザーがデバイスを回転させるなど)再作成するのではなく、アプリの存続期間中存続するようになります。

Source