Результирующий код onActivityResult, возвращающий значение null

#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 .