java - 如何在 Activity 之外编写带有 ProgressBar 的 Upload firebase 方法?

标签 java android firebase firebase-storage

我正在使用 Firebase 上传,我想在 Activity 之外的类中编写上传的方法,因为我想多次使用它,同时我想使用显示进度的 ProgressBar ,因为它是已知的我们不能在 Activity 或 Fragment 之外使用 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 传递。

关于java - 如何在 Activity 之外编写带有 ProgressBar 的 Upload firebase 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54914574/

相关文章:

java - 如何通过第一个数值来识别字符串

java - 如何使用 Android 在 Firestore 中添加时间戳?

Firebase 云函数 : add value to firebase database

java - 使用 java 正则表达式而不是引号替换单词

java - Android:另一个线程导致 UI 无响应?

java.lang.NoSuchMethodError : No interface method sort(Ljava/util/Comparator;) exception in sorting arraylist android

ios - Firebase Dynamic Link 无法直接打开应用

android - 如何让 onTouchEvent、长按和上下文菜单一起工作?

java - 我如何使用 TCP 将相同的数据发送到多个 android 手机?

android - 警报管理器未在 android 中的确切时间触发警报