应用程序崩溃并给出“ java.lang.NullPointerException”错误

时间:2018-06-20 12:56:21

标签: android firebase

我已经在stackoverflow中看到了很多问题,但是没有一个能够解决我的问题。这是我的代码。代码中没有错误,但应用程序在运行时崩溃,从而在Logcat中给出此错误-尝试在null对象上调用虚拟方法'android.graphics.Bitmap android.graphics.drawable.BitmapDrawable.getBitmap()'参考

public void SaveImageInFirebase(){
        FirebaseStorage storage = FirebaseStorage.getInstance();
        StorageReference storageRef = storage.getReferenceFromUrl("gs://opiniondonkey-9c20e.appspot.com");
        SimpleDateFormat df = new SimpleDateFormat("ddMMyyHHmmss");
        Date dataobj = new Date();
        String imagePath = df.format(dataobj) + ".jpg";
        StorageReference ImageRef = storageRef.child("images/" + imagePath);

        mPic.setDrawingCacheEnabled(true);
        mPic.buildDrawingCache();
        Drawable drawable = mPic.getDrawable();
        //TODO:: error in below line.
        Bitmap bitmap = ((BitmapDrawable)drawable).getBitmap();
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        bitmap.compress(Bitmap.CompressFormat.JPEG,100, baos);
        byte[] data = baos.toByteArray();
        UploadTask uploadTask = ImageRef.putBytes(data);
        uploadTask.addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception e) {
                Toast.makeText(getApplicationContext(),"Welcome To Opinion Donkey",Toast.LENGTH_LONG).show();
            }
        }).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
            @Override
            public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                Task<Uri> downloadUrl = taskSnapshot.getStorage().getDownloadUrl();
                myRef.child("Users").child(name).child("ProfileUrl").setValue(downloadUrl);
            }
        });

    }

我希望当某人再次登录时,Google ID图片不应覆盖我的用户图片。

1 个答案:

答案 0 :(得分:1)

可能是mPic.getDrawable();返回null。因此drawable为null,您正在通过((BitmapDrawable)drawable).getBitmap();

访问它

可能是因为PicassoImageView异步加载了图片,并且您正在尝试访问该图片,然后再进行加载/下载。

所以mPic.getDrawable()返回null

在访问if(drawable != null)之前先添加支票。

此外,仅在毕加索完成加载后才需要调用此函数。因此您可以在其中添加侦听器,并仅在加载完成后访问图像。