При нажатии кнопки берется фотография из галереи (метод addPhoto
).
В методе onActivityResult фотография загружается в хранилище Firebase с именем ключа (donosId
переменная) получено.
Затем в соответствии с документацией , чтобы получить URL изображения, мы используем метод continueWithTask
, внутри которого полученный URL помещается в Firebase.База данных.
Проблема: метод continueWithTask
не запускается (проверяется с журналами + значение URL остается пустым).В чем заключается ошибка или как еще вы можете вернуться из метода URL (переменная типа Uri)?
Код:
public void addPhoto(View view) {
Intent photoPickerIntent = new Intent(Intent.ACTION_PICK);
photoPickerIntent.setType("image/*");
startActivityForResult(photoPickerIntent, GALLERY_REQUEST);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 1 && data != null) {
final DatabaseReference newDatabaseReference = FirebaseDatabase.getInstance().getReference("items").push();
donosId = newDatabaseReference.getKey();
final StorageReference imageRef = FirebaseStorage.getInstance().getReference().child("images/" + donosId + ".jpg");
imageRef.putFile(data.getData()).continueWithTask(new Continuation<UploadTask.TaskSnapshot, Task<Uri>>() {
@Override
public Task<Uri> then(@NonNull Task<UploadTask.TaskSnapshot> task) throws Exception {
if (!task.isSuccessful()) {
throw task.getException();
}
// Continue with the task to get the download URL
return imageRef.getDownloadUrl();
}
}).addOnCompleteListener(new OnCompleteListener<Uri>() {
@Override
public void onComplete(@NonNull Task<Uri> task) {
if (task.isSuccessful()) {
Uri downloadUri = task.getResult();
String var = downloadUri.toString();
Item item = new Item(mNameEditText.getText().toString(),
mSecNameEditText.getText().toString(), var,
(int) System.currentTimeMillis());
newDatabaseReference.setValue(item);
}
}
});
}
}
Я не знаю, почему функция неработает внутри и не может получить доступ к downloadURL, но изображение загружается в Firebase Storge.