【问题标题】:Firebase storage images using too much dataFirebase 存储图像使用过多数据
【发布时间】:2017-09-25 18:15:58
【问题描述】:

我正在开发一个应用程序,以使用带有相关信息的 firebase 在网格视图中显示图像。

我注意到它使用大量数据。我打开了显示当前数据传入和传出,以显示在我的通知中。即使图像已加载,它仍在使用数据。

[下午 5:13 的数据使用情况]

[下午 5:14 的数据使用情况]

[下午 5:16 的数据使用情况]

[下午 5:20 的数据使用情况]

[图像已加载并仍在使用数据...]

[存储中的图像和大小]

link to all images

我有一个读取我的数据库的活动,在里面我循环访问数据库,然后我将数据解析为一个带有获取和设置的对象类。

 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


【解决方案1】:

使用一些识别逻辑将图像的 URL 保存在数据库中,然后使用 Glide 库从 URL 加载图像。它将处理内存和缓存图像。

【讨论】:

  • 为什么投反对票?我使用这种技术,而且效果很好。
猜你喜欢
  • 2016-12-13
  • 1970-01-01
  • 1970-01-01
  • 2020-10-23
  • 1970-01-01
  • 1970-01-01
  • 2019-01-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多