#android #firebase #android-intent #firebase-realtime-database
#Android #firebase #android-намерение #firebase-база данных в реальном времени
Вопрос:
Для меня это довольно разочаровывающая ошибка, ниже приведена реализация для нажатия кнопки, которая выберет изображение для загрузки в мой firestore, но я получаю -1 в качестве результирующего кода.
mAddMessageImageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// Select image for image message on click.
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("image/*");
startActivityForResult(intent, REQUEST_IMAGE);
}
});
И, наконец, виновник onActivityResult:
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Log.d(TAG, "onActivityResult: requestCode=" requestCode ", resultCode=" resultCode);
if (requestCode == REQUEST_IMAGE) {
if (resultCode == RESULT_OK) {
if (data != null) {
final Uri uri = data.getData();
Log.d(TAG, "Uri: " uri.toString());
FriendlyMessage tempMsg =
new FriendlyMessage(null, mUsername, mPhotoUrl, LOADING_IMAGE_URL);
mFirebaseDatabaseReference.child(MESSAGES_CHILD)
.push().setValue(tempMsg, new DatabaseReference.CompletionListener() {
@Override
public void onComplete(@Nullable DatabaseError databaseError, @NonNull DatabaseReference databaseReference) {
if (databaseError == null) {
String key = databaseReference.getKey();
StorageReference storageReference = FirebaseStorage.getInstance()
.getReference(mFirebaseUser.getUid())
.child(key)
.child(uri.getLastPathSegment());
putImageInStorage(storageReference, uri, key);
} else {
Log.w(TAG, "Unable to write message to database.", databaseError.toException());
}
}
});
}
}
}
}
Он продолжает загружать жестко закодированное изображение-заполнитель при каждом нажатии кнопки, пожалуйста, спасите меня!
Комментарии:
1. com.google.android.gms.tasks.zzu@6ae10e7 Я получаю это после вызова task.GetResult().getMetadata().getReference().getDownloadUrl().toString()
Ответ №1:
Вы могли бы попробовать обернуть его в блок try / catch:
try {
startActivityForResult(intent, REQUEST_IMAGE);
return true;
} catch (ActivityNotFoundException e) {
return false;
}
Комментарии:
1. Я только что увидел, что значение RESULT_OK действительно равно -1
2. В чем еще может быть проблема?
Ответ №2:
Попробуйте этот способ
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_IMAGE amp;amp; resultCode == RESULT_OK)
Ответ №3:
Вы хотите resultCode
значение -1, так как это Activity.RESULT_OK
.