2016-11-30 97 views
-1

您好,我在將圖片上傳到Firebase時出現錯誤。當我設置配置文件並在那裏運行完美時,我在活動中運行相同的代碼,但是當我在活動中可以更改配置文件圖片時出現錯誤。Android studio圖片上傳錯誤Firebase

錯誤消息

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) 

這裏是代碼

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

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

可能重複[什麼是NullPointerException,以及如何解決它?](http://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-doi-i-fix -it) – Chisko

回答

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

所以壓縮位圖檢查空指針,並試圖找到教程拉動圖像前來自畫廊。如果您的設備的Android版本是棉花糖或更高版本,還要檢查運行時權限。

+0

謝謝,但在另一項活動(同一個設備上同一應用程序中同一時間的相同應用程序)中工作的可能性如何? :) – Sam

+0

@Sam嘗試從文件路徑創建位圖而不是繪製緩存。 http://stackoverflow.com/questions/16804404/create-a-bitmap-drawable-from-file-path – Rahul