无法从Firebase下载照片-空白的ImageView

时间:2019-04-16 20:20:32

标签: java android firebase

我有GridView适配器,我想通过照片的URL从Firebase Storage下载照片。

当我将URL传递给GridViewAdapter时,照片为空白。有空间,但是没有图片。就像透明的图片一样。

如果我传递了在Google中找到的图片的URL,则可以使用,但不适用于Firebase Storage的URL。怎么了?

这是我尝试从Firebase存储获取URL的方式 我正在获取包含所有URL的节点的DataSnapshot

databaseReference.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

                photos.clear();
                for(DataSnapshot ds: dataSnapshot.getChildren()){
                    String photoURL = ds.getValue(String.class);
                    try {
                        photos.add(photoURL);


                    }catch (NullPointerException e) {
                    }
                }
                gridViewAdapter = new GridViewAdapter(getContext(), photos);
                gridView.setAdapter(gridViewAdapter);

            }
            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {
                }
        });

我的GridViewAdapter.class,getView方法

@Override
    public View getView(int position, View convertView, ViewGroup parent) {

        View gridView = convertView;

        if(convertView == null){

            inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

            gridView = inflater.inflate(R.layout.image_item,null);

        }

        ImageView imageView = gridView.findViewById(R.id.image_from_photo_album);

        Picasso.with(context).load(photos.get(position)).into(imageView);

        return imageView;
    }

没有Firebase存储URL的ScreenView:

ScreenView without Firebase Storage URL

带有Firebase存储URL的ScreenView:

ScreenView with Firebase Storage URL

4 个答案:

答案 0 :(得分:1)

尝试将Picasso.with(context).load(photos.get(position)).into(imageView)更改为: String url = photos.get(position); Picasso.with(context).load(url).into(imageView)

另外:也许您从Firebase传来的照片URL始终为Null,您是否调试过?

答案 1 :(得分:0)

这是非常广泛的。当您将网址“传递”到GridViewAdapter时,如何加载图像?也许上传您的代码,以便我们为您提供帮助。

答案 2 :(得分:0)

如果您的URL正确,ImageView可以正确渲染其他图像,那么看来毕加索可能会产生一些问题:

  • 您在缓存或下载程序方面遇到问题。请参阅本主题How do I use disk caching in Picasso?,也许对您有帮助。
  • URL的下载错误。尝试将错误处理添加到毕加索链中
Picasso.with(context)
    .load(photos.get(position))
    .error(R.drawable.error_image)
    .placeholder(R.mipmap.ic_launcher)
    .into(imageView);

更多详细信息here

答案 3 :(得分:0)

问题是,我在负责显示图像的ImageView中的layout_width和layout_height上设置了wrap_content属性。早些时候,此图像的高度非常大(我不知道为什么),这是造成问题的原因。

注意:分辨率为800x450的Google GridView for images的URL可以完美地工作,问题仅在于Firebase Storage中的照片。

问题已部分解决,因为如果我设置图像的固定大小,它将显示图像,但仍然存在一些问题...例如GridView有时会将两个图像放置在同一位置,或者GridView的第一个元素正在加载。