【问题标题】:New custom list item is not adding to Arraylist while retrieving image from firebase storage从 Firebase 存储中检索图像时,新的自定义列表项未添加到 Arraylist
【发布时间】:2020-08-10 07:17:09
【问题描述】:

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

【问题讨论】:

    标签: android firebase arraylist sharedpreferences firebase-storage


    【解决方案1】:

    我发现问题是由于从 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++;
    
                    }
                });
    
            }
           
        }
    
    

    【讨论】:

      猜你喜欢
      • 2017-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-23
      • 1970-01-01
      • 1970-01-01
      • 2017-08-30
      相关资源
      最近更新 更多