Android Firebase存储映像使用太多数据
我正在开发一个应用程序,使用firebase在网格视图中显示图像,并提供相关信息 我注意到它使用了大量的数据。我打开了“显示当前数据输入和输出”以在我的通知中显示。即使图像已加载,它仍在使用数据 [下午5:13的数据使用情况] [下午5:14的数据使用情况] [下午5:16的数据使用情况] [下午5:20的数据使用情况] [图像已加载并仍在使用数据…] [存储器中的图像和大小] 我有一个活动,它读取我的数据库,在那里我循环遍历数据库,然后用get和set将数据解析为一个对象类Android Firebase存储映像使用太多数据,android,firebase,firebase-storage,android-gridview,Android,Firebase,Firebase Storage,Android Gridview,我正在开发一个应用程序,使用firebase在网格视图中显示图像,并提供相关信息 我注意到它使用了大量的数据。我打开了“显示当前数据输入和输出”以在我的通知中显示。即使图像已加载,它仍在使用数据 [下午5:13的数据使用情况] [下午5:14的数据使用情况] [下午5:16的数据使用情况] [下午5:20的数据使用情况] [图像已加载并仍在使用数据…] [存储器中的图像和大小] 我有一个活动,它读取我的数据库,在那里我循环遍历数据库,然后用get和set将数据解析为一个对象类 found_a
found_animal animal = new found_animal(imgUrl
,animalBreed
,animalCoat
,animalColour
,animalEarType
,animalGender
,animalIDTag,
animalSize,
animalTail,
animalType,
latitude,
longitude,
name,
number,Date);
然后我有一个类,它使用数组适配器扩展这个类
public class found_animal_array extends ArrayAdapter<found_animal>
找到公共类\u animal\u数组扩展了ArrayAdapter
我使用此代码下载图像
found_animal card = getItem(position);
viewHolder.imgUrl= card.getImgUrl();
String ref = "myref" + viewHolder.imgUrl;
storageRef.child(ref).getBytes(Long.MAX_VALUE).addOnSuccessListener(new OnSuccessListener<byte[]>() {
@Override
public void onSuccess(byte[] bytes) {
final Bitmap bitmap = BitmapFactory.decodeByteArray(bytes, 0,bytes.length);
viewHolder.im.post(new Runnable() { //im is a imageview
@Override
public void run() {
viewHolder.im.setImageBitmap(bitmap);
}
}) ;
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception exception) {
Log.i("something went wrong", exception.getMessage());
}
});
found\u动物卡=getItem(位置);
viewHolder.imgUrl=card.getImgUrl();
String ref=“myref”+viewHolder.imgUrl;
storageRef.child(ref).getBytes(Long.MAX_值).addOnSuccessListener(新的OnSuccessListener(){
@凌驾
成功时的公共void(字节[]字节){
最终位图位图=位图工厂.decodeByteArray(字节,0,字节.长度);
viewHolder.im.post(新Runnable(){//im是一个imageview
@凌驾
公开募捐{
viewHolder.im.setImageBitmap(位图);
}
}) ;
}
}).addOnFailureListener(新的OnFailureListener(){
@凌驾
public void onFailure(@NonNull异常){
Log.i(“出错了”,exception.getMessage());
}
});
我刚刚重新运行了该活动,并注意到当gridview上的scrollview被移动时,它会使用数据。。喜欢重新下载图像。使用一些识别逻辑将图像的URL保存在数据库中,然后使用Glide库从URL加载图像。它将负责内存和缓存图像。当您滚动时,将调用适配器的getView。如果你把下载代码放在getitem或getview中,那么它会在每个卷轴上运行。那么我应该把下载代码放在哪里呢?它当前在getView中@Birendrasing下载后即可保存图像。然后在下载之前,您可以检查设备上是否存在图像文件。仅当设备上不存在映像时才下载映像。为什么选择向下投票?我使用这种技术,而且效果很好。