2016-11-30 10 views
-1

Hallo Ich habe einen Fehler beim Hochladen von Bildern auf Firebase erhalten. Ich führe den gleichen Code in Aktivität, wenn ich Profil aufstelle und dort läuft es perfekt, aber wenn ich das in Tätigkeit bekam, wo man Profilbild ändern kann, kommt ein Fehler.Android Studio Fehler beim Hochladen von Bildern Firebase

Fehlermeldung

Exception java.lang.RuntimeException: Failure delivering result 

ResultInfo{who=null, request=2, result=-1, data=Intent { dat=file:///storage/emulated/0/DCIM/Facebook/FB_IMG_1476211508746.jpg typ=image/jpeg }} to activity {com.samo.facedatefb/com.samo.facedatefb.Settings}: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.graphics.Bitmap.compress(android.graphics.Bitmap$CompressFormat, int, java.io.OutputStream)' on a null object reference 
android.app.ActivityThread.deliverResults (ActivityThread.java:3741) 
android.app.ActivityThread.handleSendResult (ActivityThread.java:3784) 
android.app.ActivityThread.access$1300 (ActivityThread.java:169) 
android.app.ActivityThread$H.handleMessage (ActivityThread.java:1472) 
android.os.Handler.dispatchMessage (Handler.java:11 
android.os.Looper.loop (Looper.java:194) 
android.app.ActivityThread.main (ActivityThread.java:5546) 
java.lang.reflect.Method.invoke (Method.java) 
java.lang.reflect.Method.invoke (Method.java:372) 
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:967) 
com.android.internal.os.ZygoteInit.main (ZygoteInit.java:762) 
arrow_drop_down 
Caused by java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.graphics.Bitmap.compress(android.graphics.Bitmap$CompressFormat, int, java.io.OutputStream)' on a null object reference 
com.samo.facedatefb.Settings.onActivityResult (Settings.java:232) 
android.app.Activity.dispatchActivityResult (Activity.java:6177) 
android.app.ActivityThread.deliverResults (ActivityThread.java:3737) 
android.app.ActivityThread.handleSendResult (ActivityThread.java:3784) 
android.app.ActivityThread.access$1300 (ActivityThread.java:169) 
android.app.ActivityThread$H.handleMessage (ActivityThread.java:1472) 
android.os.Handler.dispatchMessage (Handler.java:111) 
android.os.Looper.loop (Looper.java:194) 
android.app.ActivityThread.main (ActivityThread.java:5546) 
java.lang.reflect.Method.invoke (Method.java) 
java.lang.reflect.Method.invoke (Method.java:372) 
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:967) 
com.android.internal.os.ZygoteInit.main (ZygoteInit.java:762) 

Und hier ist der Code

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 

    if (requestCode == GALLERY_INTENT && resultCode == RESULT_OK) { 
     mProgressDialog.setMessage("Uploading..."); 
     mProgressDialog.show(); 

     StorageReference imageRef = mStorage.child(myEmail); 
     StorageReference imageImagesRef = mStorage.child("photos/" + myEmail); 

     imageRef.getName().equals(imageImagesRef.getName()); // true 
     imageRef.getPath().equals(imageImagesRef.getPath()); // false 


     Uri uri = data.getData(); 
     imageView.setImageURI(uri); 

     imageView.setDrawingCacheEnabled(true); 
     imageView.buildDrawingCache(); 
     Bitmap bitmap = imageView.getDrawingCache(); 
     ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
     bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos); 
     byte[] data2 = baos.toByteArray(); 

     UploadTask uploadTask = imageImagesRef.putBytes(data2); 
     uploadTask.addOnFailureListener(new OnFailureListener() { 
      @Override 
      public void onFailure(@NonNull Exception exception) { 
       // Handle unsuccessful uploads 
       Toast.makeText(getApplicationContext(), "Sorry, your image wasn't set, please try again", 
         Toast.LENGTH_LONG).show(); 
      } 
     }).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() { 
      @Override 
      public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) { 
       // taskSnapshot.getMetadata() contains file metadata such as size, content-type, and download URL. 
       mProgressDialog.dismiss(); 
       Toast.makeText(getApplicationContext(), "Upload done", 
         Toast.LENGTH_SHORT).show(); 
       Intent intent = new Intent(getApplicationContext(), MapsActivity.class); 
       startActivity(intent); 
      } 
     }); 
    } 
} 

und

} else if (arrayList.get(position).equals("Change profile photo")) { 
     Intent intent = new Intent(Intent.ACTION_PICK); 
     intent.setType("image/*"); 
     startActivityForResult(intent, GALLERY_INTENT); 
} 
+0

Mögliche Duplikate von [Was ist eine NullPointerException, und wie behebe ich es?] (Http://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-i-fix -it) – Chisko

Antwort

1
// This is null 
Uri uri = data.getData(); 

Also, bevor Bitmap-Check Null-Zeiger Komprimieren und versuchen Tutorial zum Ziehen Bilder zu finden aus der Galerie. Überprüfen Sie auch die Runtime-Berechtigung, wenn die Android-Version Ihres Geräts Marshmallow oder höher ist.

+0

Danke, aber wie ist es möglich, dass in einer anderen Aktivität (in der gleichen App auf demselben Gerät zur gleichen Zeit) es funktioniert? :) – Sam

+0

@Sam Versuchen Sie, Bitmap aus dem Dateipfad zu erstellen, anstatt den Cache zu zeichnen. http://stackoverflow.com/questions/16804404/create-a-bitmap-drawable-from-file-path – Rahul

Verwandte Themen