【问题标题】:Android studio Image uploading error FirebaseAndroid studio 图片上传错误 Firebase
【发布时间】:2017-04-15 04:24:50
【问题描述】:

您好,我在将图片上传到 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);
}

【问题讨论】:

标签: android firebase bitmap firebase-storage


【解决方案1】:
// This is null  
 Uri uri = data.getData();

所以在压缩位图之前检查空指针并尝试找到从图库中提取图像的教程。如果您的设备的 Android 版本是 marshmallow 或更高版本,还要检查运行时权限。

【讨论】:

  • 谢谢,但是在另一个活动中(同时在同一设备上的同一应用程序中)它怎么可能工作? :)
  • @Sam 尝试从文件路径而不是绘图缓存创建位图。 stackoverflow.com/questions/16804404/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-29
  • 1970-01-01
  • 2020-11-08
  • 2017-03-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多