从 firebase 存储中检索图像时,新的自定义列表项未添加到 Arraylist

New custom list item is not adding to Arraylist while retrieving image from firebase storage

我正在尝试将 firebase 数据存储为离线数据集。因此,在那种情况下,我已将 firestore 数据检索到一个列表中,该列表作为 List<CropsModel> data 传递给 addCrops() 方法。使用此列表的数据,我正在尝试检索我之前存储到完全正常工作的 firestore 存储的 firestore 存储图像数据。问题是我试图将图像数据和 CropsModel 列表数据组合到一个列表 mData 中,这是一个 CustomListItem_Cultivation 类型的列表。但由于某种原因,数据没有存储到列表中。我已经检查了循环外 mData 列表的大小为 0,而 CropsModel 列表的大小为 5。因此没有数据转换为 json 来存储 sharedPreferance

 private void addCrops(final List<CropsModel> data) {
        Log.d("checked", "crops here");
        for (final CropsModel crop : data) {
            StorageReference storageReference = FirebaseStorage.getInstance().getReferenceFromUrl("gs://app-597o.appspot.com/crops/").child(crop.getNameEnglish() + ".jpg");


            try {
                final File file = File.createTempFile("image1", "jpg");
                storageReference.getFile(file).addOnSuccessListener(new OnSuccessListener<FileDownloadTask.TaskSnapshot>() {
                    @Override
                    public void onSuccess(FileDownloadTask.TaskSnapshot taskSnapshot) {
                        Bitmap bitmap = BitmapFactory.decodeFile(file.getAbsolutePath());
                        ByteArrayOutputStream baos = new ByteArrayOutputStream();
                        bitmap.compress(Bitmap.CompressFormat.PNG, 90, baos);
                        byte[] b = baos.toByteArray();
                        String imageEncoded = Base64.encodeToString(b, Base64.DEFAULT);
                   mData.add(new CustomListItem_Cultivation(crop.getNameBangla(),crop.getNameEnglish(),imageEncoded));
//                        Log.d("datasetCrop", crop.nameBangla + " " + crop.nameEnglish + " " + crop.cropPicture + " " + crop.cropPicture.length);
                    }
                });
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        Gson gson = new Gson();
        String json= gson.toJson(mData);
        editor.putString(CULTIVATION_ITEMS,json);
        editor.apply();
    }

CustomListItem_Cultivation.java

package com.example.app.model;

public class CustomListItem_Cultivation {


     public String nameBangla;
     public String nameEnglish;
     public String userPhoto;

    public CustomListItem_Cultivation(String nameBangla, String nameEnglish, String userPhoto) {
        this.nameBangla = nameBangla;
        this.nameEnglish = nameEnglish;
        this.userPhoto = userPhoto;
    }


    public String getNameBangla() {
        return nameBangla;
    }

    public String getNameEnglish() {
        return nameEnglish;
    }

    public String getUserPhoto() {
        return userPhoto;
    }
}

我发现问题是由于从 firebase 存储加载数据的时间延迟造成的。我已经通过下面的代码解决了这个问题。

 private void addCrops(final List<CropsModel> data) {
      
        for ( final CropsModel crop : data) {

            StorageReference storageReference = FirebaseStorage.getInstance().getReferenceFromUrl("gs://farmersapp-31e06.appspot.com/crops/").child(crop.getNameEnglish() + ".jpg");

            storageReference.getBytes(1024*1024).addOnSuccessListener(new OnSuccessListener<byte[]>() {
                @Override
                public void onSuccess(byte[] bytes) {


                    Bitmap bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);

                    ByteArrayOutputStream baos = new ByteArrayOutputStream();
                    bitmap.compress(Bitmap.CompressFormat.PNG, 90, baos);

                    byte[] b = baos.toByteArray();

                    String imageEncoded = Base64.encodeToString(b, Base64.DEFAULT);


                    mData.add(new CustomListItem_Cultivation(crop.getNameBangla(),crop.getNameEnglish(),imageEncoded));
                    if(data.size()==iterationCnt)
                    {

                        Gson gson = new Gson();
                        String json= gson.toJson(mData);
                        editor.putString(CULTIVATION_ITEMS,json);
                        editor.apply();

                    }
                    iterationCnt++;

                }
            });

        }
       
    }