【发布时间】:2017-09-25 18:15:58
【问题描述】:
我正在开发一个应用程序,以使用带有相关信息的 firebase 在网格视图中显示图像。
我注意到它使用大量数据。我打开了显示当前数据传入和传出,以显示在我的通知中。即使图像已加载,它仍在使用数据。
[下午 5:13 的数据使用情况]
[下午 5:14 的数据使用情况]
[下午 5:16 的数据使用情况]
[下午 5:20 的数据使用情况]
[图像已加载并仍在使用数据...]
[存储中的图像和大小]
我有一个读取我的数据库的活动,在里面我循环访问数据库,然后我将数据解析为一个带有获取和设置的对象类。
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>
我使用此代码下载图像
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());
}
});
我刚刚重新运行该活动,并注意到当 gridview 上的滚动视图被移动时,它会使用数据。就像它重新下载图像一样。
【问题讨论】:
-
当您滚动时,会调用适配器的 getView。如果您将下载代码放在 getitem 或 getview 中,那么它会在每次滚动时运行。
-
那么我应该把下载代码放在哪里呢?它目前在 getView 中。 @BirendraSingh
-
下载后可以保存图片。然后在下载之前,您可以检查设备上是否存在图像文件。仅当设备上不存在该图像时才下载该图像。
标签: android firebase firebase-storage android-gridview