Android 应用程序崩溃并出现“java.lang.NullPointerException”错误
我已经在stackoverflow中看到了许多问题,但没有一个能够解决我的问题。这是我的代码。代码中没有错误,但应用程序在运行时崩溃,在Logcat中出现此错误-尝试在空对象引用上调用虚拟方法“android.graphics.Bitmap android.graphics.drawable.BitmapDrawable.GetBitBitmap”Android 应用程序崩溃并出现“java.lang.NullPointerException”错误,android,firebase,Android,Firebase,我已经在stackoverflow中看到了许多问题,但没有一个能够解决我的问题。这是我的代码。代码中没有错误,但应用程序在运行时崩溃,在Logcat中出现此错误-尝试在空对象引用上调用虚拟方法“android.graphics.Bitmap android.graphics.drawable.BitmapDrawable.GetBitBitmap” public void SaveImageInFirebase(){ FirebaseStorage storage = Fireb
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图片不应覆盖我的用户图片。可能是mPic.getDrawable;正在返回null。因此drawable为null,您通过BitmapDrawabledrawable.getBitmap访问它
这可能是因为毕加索在ImageView async中加载图像,而您正试图在加载/下载图像之前访问该图像
因此,mPic.getDrawable返回null
在访问ifdrawable之前添加检查!=那里是空的
此外,只有在毕加索完成加载后才需要调用此函数。所以你们可以在那个里添加监听器,只有在图像加载完成后才能访问它。代码太多,错误堆栈跟踪不够…现在编辑。我想我知道答案。位图文件中有错误,所以我可能应该尝试添加try-catch,然后在调试后看到错误?是的,由于异步性质,这可能是错误,但我通过try-and-catch块发现了错误。