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
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
ฉันยินดีที่จะอธิบายเกี่ยวกับ
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 StorageIt 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.