skip to Main Content

I am trying to create a method for downloading my 3D files stored in the Firebase Storage with OnProgressListener and show the downloaded percentage for the user with a progressBar, but it is not working as expected progress_percentage, i don’t know why my code inside the OnProgressListener is not working.

I followed these docs to tryout what i intended to do.

https://firebase.google.com/docs/storage/android/download-files#java

https://github.com/firebase/snippets-android/blob/bdab1d019d41c1e034ecc1d63d30c7071af3d79d/storage/app/src/main/java/com/google/firebase/referencecode/storage/StorageActivity.java#L346-L357

this is how my method looks like.I feel i have done something wrong in in my code, I am expecting some help to correct my code and make this working..

    private void download3dFile(String fileUrl){
        downloadProgressLayout.setVisibility(View.VISIBLE);

        FirebaseStorage storage = FirebaseStorage.getInstance();
        StorageReference httpReference = storage.getReferenceFromUrl(fileUrl);
        File localFile;

        try {
            localFile = File.createTempFile("model","glb");

        } catch (IOException e) {
            throw new RuntimeException(e);
        }

        httpReference.getFile(localFile).addOnProgressListener(new OnProgressListener<FileDownloadTask.TaskSnapshot>() {
            @Override
            public void onProgress(@NonNull FileDownloadTask.TaskSnapshot taskSnapshot) {
                long percentage = taskSnapshot.getBytesTransferred()/taskSnapshot.getTotalByteCount()*100;
                progressPercentageTxt.setText(MessageFormat.format("{0}%", percentage));
                progressBar.setProgress((int) percentage);
            }
        }).addOnCompleteListener(new OnCompleteListener<FileDownloadTask.TaskSnapshot>() {
            @Override
            public void onComplete(@NonNull Task<FileDownloadTask.TaskSnapshot> taskSnapshot) {
                Toast.makeText(MainActivity.this, "Download Complete", Toast.LENGTH_SHORT).show();
                downloadProgressLayout.setVisibility(View.GONE);
                Uri fileUri = Uri.fromFile(localFile);
                Toast.makeText(MainActivity.this, "Uri - "+fileUri, Toast.LENGTH_LONG).show();
            }
        }).addOnSuccessListener(new OnSuccessListener<FileDownloadTask.TaskSnapshot>() {
            @Override
            public void onSuccess(FileDownloadTask.TaskSnapshot taskSnapshot) {

            }
        }).addOnCanceledListener(new OnCanceledListener() {
            @Override
            public void onCanceled() {
                Toast.makeText(MainActivity.this, "Download Canceled!", Toast.LENGTH_SHORT).show();
                downloadProgressLayout.setVisibility(View.GONE);
            }
        }).addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception e) {
                Toast.makeText(MainActivity.this, "Download Failed - "+e.getMessage(), Toast.LENGTH_SHORT).show();
                downloadProgressLayout.setVisibility(View.GONE);
            }
        });


    }

2

Answers


  1. ฉันยินดีที่จะอธิบายเกี่ยวกับ OnProgressListener ใน Firebase Storage สำหรับการพัฒนา Android: OnProgressListener ใน Firebase Storage คืออะไร? OnProgressListener เป็นอินเทอร์เฟซที่จัดทำโดย Firebase Storage ซึ่งช่วยให้คุณสามารถติดตามความคืบหน้าของการอัปโหลดและดาวน์โหลดไฟล์ เป็นเครื่องมือที่มีประสิทธิภาพในการแจ้งสถานะการดำเนินการเหล่านี้ให้ผู้ใช้ทราบ โดยเฉพาะเมื่อต้องจัดการกับไฟล์ขนาดใหญ่ วิธีใช้ OnProgressListener: 1. รวมไลบรารี Firebase Storage: ตรวจสอบให้แน่ใจว่าคุณมีไลบรารี Firebase Storage Android รวมอยู่ในโปรเจ็กต์ของคุณ คุณสามารถทำได้โดยเพิ่มการอ้างอิงในไฟล์ build.gradle ของคุณ 2. สร้างการอ้างอิงที่เก็บข้อมูล: รับการอ้างอิงไปยังไฟล์หรือเส้นทางใน Firebase Storage ที่การอัปโหลดหรือดาวน์โหลดจะเกิดขึ้น คุณสามารถใช้ FirebaseStorage.getInstance().getReference() เพื่อสร้างการอ้างอิง 3. แนบ OnProgressListener: เมื่อคุณเริ่มอัปโหลดหรือดาวน์โหลดงานโดยใช้ putFile() หรือ getFile() ให้เชื่อมโยงเมธอด addOnProgressListener() กับงาน เมธอดนี้ใช้วัตถุ OnProgressListener เป็นอาร์กิวเมนต์ นี่คือตัวอย่าง: java StorageReference storageRef = FirebaseStorage.getInstance().getReference(); storageRef.putFile(fileToUpload) .addOnProgressListener(new OnProgressListener() { @Override public void onProgress(@NonNull FileUploadTask.TaskSnapshot taskSnapshot) { // อัปเดต UI ที่นี่เพื่อแสดงความคืบหน้า } }); ภายในวิธี onProgress() – วิธี onProgress() ของ OnProgressListener จะถูกเรียกเป็นระยะๆ ในระหว่างกระบวนการอัปโหลดหรือดาวน์โหลด – รับอ็อบเจ็กต์ FileDownloadTask.TaskSnapshot (สำหรับการดาวน์โหลด) หรือ FileUploadTask.TaskSnapshot (สำหรับการอัปโหลด) เป็นอาร์กิวเมนต์ – สแนปช็อตนี้ให้ข้อมูลเกี่ยวกับความคืบหน้า รวมถึง: – getBytesTransferred(): จำนวนไบต์ที่ถูกถ่ายโอนจนถึงขณะนี้ – getTotalByteCount(): ขนาดทั้งหมดของไฟล์ที่กำลังอัพโหลดหรือดาวน์โหลด 4. คำนวณและอัปเดตความคืบหน้า: – ภายในวิธี onProgress() ให้คำนวณความคืบหน้าในการอัปโหลดหรือดาวน์โหลดเป็นเปอร์เซ็นต์: java long percentage = (long) ((double) taskSnapshot.getBytesTransferred() / taskSnapshot.getTotalByteCount()) * 100; – ใช้เปอร์เซ็นต์นี้ในการอัปเดตแถบความคืบหน้าหรือองค์ประกอบ UI อื่นๆ ในแอปของคุณเพื่อแสดงความคืบหน้าให้ผู้ใช้เห็น ข้อควรพิจารณาเพิ่มเติม: – ไม่รับประกันว่า OnProgressListener จะถูกเรียกใช้ในช่วงเวลาที่กำหนด อาจมีการเรียกใช้บ่อยขึ้นสำหรับไฟล์ขนาดใหญ่ หรือเรียกใช้น้อยลงสำหรับไฟล์ขนาดเล็ก – คุณยังสามารถใช้ addOnCompleteListener() ในงานเพื่อจัดการการเสร็จสมบูรณ์หรือล้มเหลวของการอัปโหลดหรือดาวน์โหลด โดยทำตามขั้นตอนเหล่านี้และทำความเข้าใจแนวคิดต่างๆ คุณจะสามารถใช้ OnProgressListener ได้อย่างมีประสิทธิภาพเพื่อมอบประสบการณ์ผู้ใช้ที่ดีขึ้นในการดำเนินการที่เกี่ยวข้องกับ Firebase Storage

    Login or Signup to reply.
  2. It seems your code is just working fine, if you are hitting inside of onProgress callback, the code should work, change the code inside onProgress Callback as follows.

    double percentage = (100.0 * taskSnapshot.getBytesTransferred()) / taskSnapshot.getTotalByteCount();
    progressPercentageTxt.setText(MessageFormat.format("{0}%", (int) percentage));
    progressBar.setProgress((int) percentage);
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search