2016-04-29 14 views
0

Ich habe 3 Funktionen, die Bilder hochladen und den Namen eines Bildes auf einem Server festlegen. Die Sache ist, ich kann nicht alle Funktionen auf einmal arbeiten. Nur eine Funktion funktioniert und die andere löst eine NullPointerException aus, die nicht auf etwas Bestimmtes, sondern nur auf die erste Zeile der Funktion zeigt.Android Volley NullPointerException ohne Erklärung

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); 
} 

Dies ist der log

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) 

Die uploadMainImage Funktion zuerst ausführt. Wenn die Antwort gut ist, ruft sie uploadThumbImage auf. Wenn das Ergebnis von uploadThumbImage gut ist, ruft es updateImageName auf. Wenn ich keine Funktion auskommentiere, tritt die Ausnahme in der Funktion uploadThumbImage auf. Wenn ich die erste Funktion auskommentiere, tritt die Ausnahme in der letzten Funktion auf. Wenn ich versuche, die Ausnahme abzufangen, erscheint die Nachricht als null.

+0

ich denke 'getActivity()' null ist, überprüfen 'isAdded()' auf der ersten Zeile der Methode –

+0

ich es mit isAdded geprüft() Funktion und kehrt in die Funktion falsch, wo es schlägt fehl. Was könnte der Grund sein? Warum funktionieren alle Funktionen vor dieser Funktion, aber diese Funktion schlägt fehl, wenn sich der Code in einem einzelnen Fragment befindet? –

+0

okay, ich habe es gelöst. Ich rief 'getFragmentManager(). PopBackStack (null, FragmentManager.POP_BACK_STACK_INCLUSIVE);' in einer anderen Funktion vor all diesen und ich vergaß es zu entfernen. Danke für die Hilfe! –

Antwort

0

Ein Schlüsselkonzept besteht darin, dass die RequestQueue mit dem Anwendungskontext und nicht mit einem Aktivitätskontext instanziiert werden muss. Dadurch wird sichergestellt, dass die RequestQueue für die gesamte Lebensdauer Ihrer App gültig ist und nicht jedes Mal neu erstellt wird, wenn die Aktivität neu erstellt wird (z. B. wenn der Benutzer das Gerät dreht).

Source