Firebase Android:暂停/恢复上载任务导致文件未完全上载
我有一个简单的Firebase Android:暂停/恢复上载任务导致文件未完全上载,android,firebase,file,uri,firebase-storage,Android,Firebase,File,Uri,Firebase Storage,我有一个简单的UploadTask对象,它使用Firebase存储,允许我将照片/视频上传到此存储 根据文档,我添加了一个pause()+resume()逻辑,效果很好。 我正在从OnProgressListener()保存会话URI 当我使用pause()/resume()方法(通过单击简单ImageView中的元素)进行“播放”测试时,有时会导致上载成功,并且文件在Firebase存储中没有达到其完整大小,如下所示: 但是上传成功了! 有什么办法解决这个问题吗 编辑: 以下是处理会话URI
UploadTask
对象,它使用Firebase存储,允许我将照片/视频上传到此存储
根据文档,我添加了一个pause()+resume()逻辑,效果很好。
我正在从OnProgressListener()
保存会话URI
当我使用pause()/resume()方法(通过单击简单ImageView中的元素)进行“播放”测试时,有时会导致上载成功,并且文件在Firebase存储中没有达到其完整大小,如下所示:
但是上传成功了!
有什么办法解决这个问题吗
编辑:
以下是处理会话URI
保存的代码:
private void saveUriSession(UploadTask.TaskSnapshot taskSnapshot, Post post) {
if (taskSnapshot.getUploadSessionUri() != null && !isSessionUriRegistered(post.getPostID())) {
Log.d(TAG, "saveUriSession: saving session.");
saveSharedPreference.setUriSession(taskSnapshot.getUploadSessionUri().toString(), post);
}
}
public Boolean isSessionUriRegistered(String uid) {
Log.d(TAG, "isSessionUriRegistered: " + saveSharedPreference.getUriSession(uid));
return !saveSharedPreference.getUriSession(uid).toString().equals("");
}
这是用于恢复/暂停上载的代码:
// Current upload task
private UploadTask uploadTask;
private UploadTask uploadImage(Post post) {
Log.d(TAG, "uploadImage: compressing image...");
byte[] bytes = imageManagerBitmap.getBytesFromBitmap(post.getFile(), 100);
uploadTask = firebaseAPI.updatePostImage(post.getPostID(), bytes);
return uploadTask;
}
public void uploadFileToDB(Post post) {
uploadImage(post).addOnProgressListener(taskSnapshot -> {
// If the session is not already saved we save it
saveUriSession(taskSnapshot, post);
if (taskSnapshot.getTotalByteCount() != 0) {
long progressCount = 100 * taskSnapshot.getBytesTransferred() / taskSnapshot.getTotalByteCount();
//progressBytes.setValue(progressCount);
}
});
}
public Boolean pauseUpload() {
if (uploadTask != null) {
return uploadTask.pause();
}
return false;
}
public Boolean resumeUpload() {
if (uploadTask != null) {
return uploadTask.resume();
}
return false;
}
ImageViewonClickListener()
方法上调用了resumeUpload()
和pauseUpload()
方法,该方法使用一个处理开关的布尔值。请编辑问题以显示未按预期方式工作的代码。代码很好,我只是怀疑Firebase终止上载会话,因为调用resume()
方法时字节数错误。SessionUri
仅在用户销毁应用程序并重新启动应用程序时使用,这没有问题。请编辑问题以显示未按预期方式工作的代码。代码很好,我只是怀疑Firebase终止上载会话,因为调用resume()
方法时字节数错误。SessionUri
仅在用户销毁应用程序并重新启动时使用,这没有问题。