Android - Firebase - TaskSnapshot - Доступ к методу должен выполняться только в закрытом режиме?
Все отлично работало... пока я не вернулся на работу с 3-месячного перерыва и обновил свою Firebase с 9.8 до 10.0.1
Теперь все мои вызовы TaskSnapshot
дают мне ошибку.
Вот пример кода, который работал отлично:
OnSuccessListener<UploadTask.TaskSnapshot> successListener = new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
attachments.add(fileName + "*-*" + taskSnapshot.getDownloadUrl().toString());
numberOfCallbacks++;
if (numberOfFiles == numberOfCallbacks) {
currentUpload = false;
onClickSendAlert(sendingView);
}
}
};
Ошибка, которую я сейчас получаю, касается taskSnapshot.getDownloadUrl()
.
Android Studio подчеркивает эту строку красным цветом и говорит:
Этот метод должен быть доступен только из тестов или в частной области
Может кто-нибудь объяснить, почему это происходит? Я работаю целый день в течение двух дней прямо сейчас и не могу, чтобы жизнь меня показала это (неловко).
Для чего этот код используется для загрузки файла в хранилище Firebase, а затем, когда он завершен (OnSuccess
), он получает URL-адрес загрузки и сохраняет его в базе данных Firebase. Это отлично работало, прежде чем я обновился до 10.0.1. Я получаю ту же ошибку в моих задачах загрузки в другом модуле.
Вот скриншот, который поможет вам лучше понять мою ситуацию:
![введите описание изображения здесь]()
Ответы
Ответ 1
Проблема, по-видимому, вызвана чрезмерной проверкой Lint. Попробуйте что-то вроде этого:
@SuppressWarnings("VisibleForTests") Uri downloadUrl = taskSnapshot.getDownloadUrl();
Этот трюк работал у меня. Если проблема связана с этот отчет об ошибках, то это должно быть исправлено в 2.4.
Ответ 2
Я застрял в одной и той же проблеме, и подавляющее действие не помогло мне. Для получения полной загрузки Uri я использовал следующий код:
ref.putFile(imagePath).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
ref.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
Log.d("URL", uri.toString());
// This is the complete uri, you can store it to realtime database
}
});
}
});
Надеюсь, это поможет кому-то.
Ответ 3
У меня была такая же проблема, и она исчезла, когда я обновил версию Firebase. Я использовал 10.0.1, и теперь я использую 11.0.0