我已经在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图片不应覆盖我的用户图片。
答案 0 :(得分:1)
可能是mPic.getDrawable();
返回null
。因此drawable为null,您正在通过((BitmapDrawable)drawable).getBitmap();
可能是因为Picasso
以ImageView
异步加载了图片,并且您正在尝试访问该图片,然后再进行加载/下载。
所以mPic.getDrawable()
返回null
。
在访问if(drawable != null)
之前先添加支票。
此外,仅在毕加索完成加载后才需要调用此函数。因此您可以在其中添加侦听器,并仅在加载完成后访问图像。