gpt4 book ai didi

java - OnSuccess 方法内的进度对话框,Firebase-Firestore?

转载 作者:行者123 更新时间:2023-12-02 09:29:18 25 4
gpt4 key购买 nike

我将 ArrayList 上传到 firebase-storage,然后检索下载 URL,然后将自定义数据对象存储到 firebase-firestore。我不知道何时停止进度对话框。

public void uploadNotesToSTORAGE(final ArrayList<NoteItem> nItems, final Activity activity) {
final ProgressDialog dialog = new ProgressDialog(activity);
dialog.setMessage("Uploading picture...");
dialog.show();

for (int i = 0; i < nItems.size(); i++) {
final String id = Calendar.getInstance().getTimeInMillis() + "";
StorageReference reference = mStorageRef.child("notes/" + id);
String filePath = nItems.get(i).getFilePath();
final int finalI = i;
final int finalI1 = i;
reference.putFile(Uri.fromFile(new File(filePath))).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
StorageReference reference = mStorageRef.child("notes/" + id);
reference.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri dUri) {
nItems.get(finalI).setId(id);
nItems.get(finalI).setDownloadLink(dUri + "");
db.collection("notes").document().set(nItems.get(finalI))
.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {

Toast.makeText(activity, "Successfully uploaded : " + nItems.get(finalI1).getFileName(), Toast.LENGTH_SHORT).show();
}
});
}
});
}
}).addOnFailureListener(onFailureListener);
dialog.dismiss();
activity.finish();
activity.startActivity(new Intent(activity, MainActivity.class));
}
}

最佳答案

reference.putFile(file) 异步上传文件,因此不要在 for 循环中上传所有文件。

而不是创建一个上传文件的函数,当在 onSuccess 中成功上传文件时,从列表中删除已上传的文件对象并发送下一个文件对象进行上传。

当文件列表中没有文件时关闭对话框。

这就像一个队列。

private ProgressDialog dialog;
private ArrayList<NoteItem> nItems

public void uploadNotesToSTORAGE(final ArrayList<NoteItem> items, Activity activity) {
nItems = items

dialog = new ProgressDialog(activity);
dialog.setMessage("Uploading picture...");
dialog.show();


if(nItems != null && !nItems.isEmpty()){
uploadSingleNote(nItems.get(0)); //get first item
}
}

private void uploadSingleNote(NoteItem item){
final String id = Calendar.getInstance().getTimeInMillis() + "";
StorageReference reference = mStorageRef.child("notes/" + id);
String filePath = item.getFilePath();

reference.putFile(Uri.fromFile(new File(filePath))).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
StorageReference reference = mStorageRef.child("notes/" + id);
reference.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri dUri) {
item.setId(id);
item.setDownloadLink(dUri + "");
db.collection("notes").document().set(nItems.get(finalI))
.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
Toast.makeText(activity, "Successfully uploaded : " + item.getFileName(), Toast.LENGTH_SHORT).show();
nItems.remove(0);
if(nItems != null && !nItems.isEmpty()){
uploadSingleNote(nItems.get(0)); //get first item
}else{
dialog.dismiss();
activity.finish();
activity.startActivity(new Intent(activity, MainActivity.class));
}
}
});
}
});
}
}).addOnFailureListener(onFailureListener);
}

关于java - OnSuccess 方法内的进度对话框,Firebase-Firestore?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58109096/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com