首页 > 解决方案 > 如何在 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);


                    }
                }

标签: javaandroidfirebasefirebase-storage

解决方案


您可以将 Activity 作为参数而不是 Context 传递。


推荐阅读