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