java - 如何在 Activity 之外使用 ProgressBar 编写 Upload firebase 方法?
问题描述
我正在使用 Firebase 上传,我想在活动之外的一个类中编写上传的方法,因为我想多次使用它,同时我想使用显示进度的 ProgressBar,众所周知,我们可以' t 在活动或片段之外使用 findViewById。
uploadTask.addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() {
@Override
public void onProgress(UploadTask.TaskSnapshot taskSnapshot) {
taskSnapshot.getError();
float progress = (float) ((100.0 * taskSnapshot.getBytesTransferred()) / taskSnapshot.getTotalByteCount());
System.out.println("Upload is " + progress + "% done");
**Here I wanna use a progressBar**
}
}).addOnPausedListener(new OnPausedListener<UploadTask.TaskSnapshot>() {
@Override
public void onPaused(UploadTask.TaskSnapshot taskSnapshot) {
System.out.println("Upload is paused");
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception exception) {
// Handle unsuccessful uploads
int errorCode = ((StorageException) exception).getErrorCode();
String errorMessage = exception.getMessage();
// test the errorCode and errorMessage, and handle accordingly
Log.d(TAG, "onSuccess: The photo has NOT been uploaded" + errorCode + errorMessage);
Toast.makeText(mContext, "Sorry the photo has not been uploaded .. Please Try again", Toast.LENGTH_SHORT);
}
}).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
circleProgressBar.setVisibility(View.GONE);
Log.d(TAG, "onSuccess: The photo is being uploaded");
Toast.makeText(mContext, "The photo has been uploaded successfully", Toast.LENGTH_SHORT).show();
//
}
}).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 ref.getDownloadUrl();
}
}).addOnCompleteListener(new OnCompleteListener<Uri>() {
@Override
public void onComplete(@NonNull Task<Uri> task) {
if (task.isSuccessful()) {
Uri downloadUri = task.getResult();
if (downloadUri != null){
String photoStringUrl = downloadUri.toString();
Log.d(TAG, "onComplete: Upload " + photoStringUrl);
//Inserting the profile photo into database {user_profile_account}
firebaseUtilities.saveProfilePhotoToDatabase(photoStringUrl);
}
}
解决方案
您可以将 Activity 作为参数而不是 Context 传递。
推荐阅读
- mysql - 如何在 mysql 5.7 中创建临时表
- html - 如何使滑块填充两个文本框之间的空间
- reactjs - 尝试从外部 API 显示图像时出错(JSON 中的意外令牌)
- spring - 移除所有消费者后,Kafka 消费者组会发生什么
- codec - 如何从 ogg/opus 文件中一一读取 OPUS 数据包
- python - BigQuery 字段的类型已从 STRING 更改为 TIMESTAMP
- javascript - P5.js如何旋转文本,每个字符旋转不同并同时移动
- r - 这种类型的绘图称为什么,R 中是否有创建此类绘图的函数?
- javascript - 如何在ckeditor 4中显示具有不同列表样式类型的嵌套有序列表?
- html - 垂直放置,同时使用 css 将块 div 内的各种内联块 div 居中