【问题标题】:Progress Dialog inside OnSuccess method, Firebase-Firestore?OnSuccess 方法中的进度对话框,Firebase-Firestore?
【发布时间】:2020-01-26 06:39:57
【问题描述】:

我正在将 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));
    }
}

【问题讨论】:

    标签: java android android-studio google-cloud-firestore firebase-storage


    【解决方案1】:

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

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

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

    这就像一个队列。

    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);
    }
    

    【讨论】:

    • 我想要一个如何做的例子。
    猜你喜欢
    • 1970-01-01
    • 2016-12-16
    • 2016-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多