我正在尝试将文件上传到firestore(带有putBytes),然后将其url上传到数据库。 因此,我正在像这样的存储任务的“ onSuccessListener”中进行数据库更新:
private void uploadFile(byte[] bookImg, final String bookName){
if(mUploadTask != null && mUploadTask.isInProgress()){
//... upload in progress ...
} else {
if (bookImg != null) {
StorageReference fileRef = mStorageRef.child(bookName);
mUploadTask = fileRef.putBytes(bookImg)
.addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
StorageReference refToUploadedPic = taskSnapshot.getMetadata().getReference();
Uri uploadedPicUri = refToUploadedPic.getDownloadUrl().getResult();
Upload upload = new Upload(bookName,
uploadedPicUri.toString());
String uploadId = mDatabaseRef.push().getKey(); //creates new entry on db
mDatabaseRef.child(uploadId).setValue(upload); //saves the file metadata on the new entry
}
})
.addOnFailureListener(new OnFailureListener() {
//... handle Failure...
})
.addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() {
//... handle onProgress...
});
} else {
Toast.makeText(this, "NoFile", Toast.LENGTH_LONG).show();
}
}
}
图片已上传到存储设备,但当它到达以下行时:
Uri uploadPicUri = refToUploadedPic.getDownloadUrl()。getResult();
我收到此错误:
java.lang.IllegalStateException:任务尚未完成 位于com.google.android.gms.common.internal.Preconditions.checkState(未知来源:8) 在com.google.android.gms.tasks.zzu.zzdq中(未知来源:4) 位于com.google.android.gms.tasks.zzu.getResult(未知来源:3) 在com.controllers.BookListActivity $ 4.onSuccess(BookListActivity.java:302) 在com.controllers.BookListActivity $ 4.onSuccess(BookListActivity.java:289) 在com.google.firebase.storage.zzi.zza(未知来源:13) 在com.google.firebase.storage.zzac.zza(未知来源:2) 在com.google.firebase.storage.zzaf.run(未知来源:6) 在android.os.Handler.handleCallback(Handler.java:789) 在android.os.Handler.dispatchMessage(Handler.java:98) 在android.os.Looper.loop(Looper.java:164) 在android.app.ActivityThread.main(ActivityThread.java:6665) 在java.lang.reflect.Method.invoke(本机方法) 在com.android.internal.os.Zygote $ MethodAndArgsCaller.run(Zygote.java:240) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:781)
问题是,当我调试并进入此行(使用F7)时,所有操作均按预期进行。...
有帮助吗?
答案 0 :(得分:0)
认为您需要在此处添加OnSuccessListener<Uri>
:
refToUploadedPic.getDownloadUrl()
.addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception exception) {
}
});