Не могу понять почему возникает данная ошибка при загрузке картинки в FireBase Storage
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'com.google.firebase.storage.StorageReference com.google.firebase.storage.StorageReference.child(java.lang.String)' on a null object reference at com.example.uchebnik.RegistrActivity.uploadImage(RegistrActivity.java:166) at com.example.uchebnik.RegistrActivity.onActivityResult(RegistrActivity.java:155)
private void init()
{
mStorageRef = FirebaseStorage.getInstance().getReference("ImageDB");
}
public void onClickChooseImage (View view)
{
getImage();
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == 1 && data != null && data.getData() != null)
{
if(resultCode == RESULT_OK)
{
profileImage.setImageURI(data.getData());
uploadImage();
}
}
}
private void uploadImage()
{
Bitmap bitmap = ((BitmapDrawable) profileImage.getDrawable()).getBitmap();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100,baos);
byte[] byteArray = baos.toByteArray();
final StorageReference mRef = mStorageRef.child(System.currentTimeMillis() + "my_image");
UploadTask up = mRef.putBytes(byteArray);
Task<Uri> task = up.continueWithTask(new Continuation<UploadTask.TaskSnapshot, Task<Uri>>() {
@Override
public Task<Uri> then(@NonNull Task<UploadTask.TaskSnapshot> task) throws Exception {
return mRef.getDownloadUrl();
}
}).addOnCompleteListener(new OnCompleteListener<Uri>() {
@Override
public void onComplete(@NonNull Task<Uri> task) {
uploadUri = task.getResult();
}
});
}
private void getImage()
{
Intent intentChooser = new Intent();
intentChooser.setType("image/*");
intentChooser.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(intentChooser, 1);
}
Ответы (1 шт):
В тексте ошибки написано, что Вы применяете метод child к пустому объекту. Насколько я вижу, это относится к вот этой строке:
final StorageReference mRef = mStorageRef.child(System.currentTimeMillis() + "my_image");
Это означает, что на этом моменте в переменной mStorageRef пусто. Этому есть несколько возможных причин.
- Вы инициализируете эту переменную в методе
init(). Возможно, Вы нигде этот метод не вызываете, и поэтому инициализация не происходит, и переменная остаётся пустой. - Вы прописываете путь до
ImageDB. Возможно, Вы случайно опечатались в названии своей базы данных, поэтому переменная неправильно инициализируется.
Я склоняюсь к 1 варианту. Чтобы проверить, так ли это, перенесите строку инициализации (вот эту: mStorageRef = FirebaseStorage.getInstance().getReference("ImageDB");) из метода init() в начало метода uploadImage()