【问题标题】:Can someone help me with logic of the firebase on success listener有人可以帮助我了解成功侦听器的firebase逻辑吗
【发布时间】:2019-11-24 03:55:45
【问题描述】:

我正在从 firebase 数据库添加和检索图像。上传图片后,它会显示在 recyclerview 的另一个活动中。 添加多个图像时,活动会在循环中不断打开,即取决于添加了多少图像。 我想在成功添加所有图像后立即打开所有活动。 我尝试制作一个将 int a 与 mClipData.getItemCount() 进行比较的逻辑,但它没有提供任何解决方案 请帮我解决这个问题

P.S:给出的代码适用于多张图片

    if (data.getClipData() != null) {
        ClipData mClipData = data.getClipData();
        ArrayList<Uri> mArrayUri = new ArrayList<>();
        for (int i = 0; i < mClipData.getItemCount(); i++) {

            final ClipData.Item item = mClipData.getItemAt(i);
            final Uri mImageUri = item.getUri();
            mArrayUri.add(mImageUri);
            // Get the cursor
            Cursor cursor = getContentResolver().query(mImageUri, filePathColumn, null, null, null);
            // Move to first row
            cursor.moveToFirst();

            final StorageReference profileStorage = uploadStorage.child(mImageUri.getLastPathSegment());
            uploadTask = profileStorage.putFile(mImageUri);
            final int finalI = i;
            uploadTask.addOnFailureListener(new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception e) {
                    showMessage(e.toString());
                }
            }).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                @Override
                public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                    Task<Uri> urlTask = uploadTask.continueWithTask(new Continuation<UploadTask.TaskSnapshot, Task<Uri>>() {
                        @Override
                        public Task<Uri> then(@NonNull Task<UploadTask.TaskSnapshot> task) throws Exception {
                            if (!task.isSuccessful()){
                                throw task.getException();
                            }
                            downloadURL = profileStorage.getDownloadUrl().toString();
                            return profileStorage.getDownloadUrl();
                        }
                    }).addOnCompleteListener(new OnCompleteListener<Uri>() {
                        @Override
                        public void onComplete(@NonNull Task<Uri> task) {
                            if(task.isSuccessful()){
                                Uri uri = task.getResult();
                                idRef.child(mImageUri.getLastPathSegment()).setValue(uri.toString());
                            }
                        }
                    }).addOnSuccessListener(new OnSuccessListener<Uri>() {
                        @Override
                        public void onSuccess(Uri uri) {
                            showMessage("image upload successful ");
                            // activity opens multiple times check it //
                            a++;
                        }
                    });
                }
            });

            if(a == mClipData.getItemCount()){
                Intent intent = new Intent(getApplicationContext(), DisplayImages.class);
                startActivity(intent);
            }

            int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
            imageEncoded  = cursor.getString(columnIndex);
            imagesEncodedList.add(imageEncoded);
            cursor.close();
        }

    }

【问题讨论】:

    标签: android firebase firebase-storage


    【解决方案1】:

    当您上传图像时,每个图像都会发生以下顺序:

    1. 您开始上传。
    2. 完成后,您可以确定图片的下载 URL。
    3. 完成后,将下载 URL 写入数据库。

    这些操作中的每一个都是异步的,您可以通过任务进行处理。由于您希望仅在将所有下载 URL 写入数据库后才显示弹出窗口,因此代码应位于最后一个完成处理程序中:

    }).addOnSuccessListener(new OnSuccessListener<Uri>() {
        @Override
        public void onSuccess(Uri uri) {
            showMessage("image upload successful ");
            // activity opens multiple times check it //
            a++;
    
            if(a == mClipData.getItemCount()){
                Intent intent = new Intent(getApplicationContext(), DisplayImages.class);
                startActivity(intent);
            }
        }
    });
    

    【讨论】:

      猜你喜欢
      • 2011-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-22
      • 1970-01-01
      • 2017-02-03
      相关资源
      最近更新 更多