Я пытаюсь загрузить файлы в Firebase через приложение для Android, поэтому хочу, чтобы процесс загрузки отображался в индикаторе выполнения
Мне удалось реализовать это раньше, когда я использовал другой метод TaskSnapshot: progress = (100.0 * taskSnapshot.getBytesTransferred ()) / taskSnapshot.getTotalByteCount (), но сейчас, похоже, я не могу найти способ
private void uploadFile(Uri data) {
progressBar.setVisibility(View.VISIBLE);
final StorageReference sRef =
mStorageReference.child(Constants.STORAGE_PATH_UPLOADS +
System.currentTimeMillis() + ".pdf");
Task<Uri> urlTask = sRef.putFile(data).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 sRef.getDownloadUrl();
}
})
.addOnCompleteListener(new OnCompleteListener<Uri>() {
@Override
public void onComplete(@NonNull Task<Uri> task) {
if (task.isSuccessful()) {
progressBar.setVisibility(View.GONE);
textViewStatus.setText("File Uploaded Successfully");
Uri downloadUrl = task.getResult();
String url=downloadUrl.toString();
Upload upload = new Upload(editTextFilename.getText().toString(),url);
mDatabaseReference.child(mDatabaseReference.push().getKey()).setValue(upload);
}
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception exception) {
Toast.makeText(getApplicationContext(), exception.getMessage(), Toast.LENGTH_LONG).show();
}
})
.addOnProgressListener(new OnProgressListener<Uri>() {
@Override
public void onProgress(Uri uri) {
double progress =
textViewStatus.setText((int) progress + "% Uploading...");
}
});
}