Java 无法从Firebase下载照片-空白图像视图

Java 无法从Firebase下载照片-空白图像视图,java,android,firebase,Java,Android,Firebase,我有GridView适配器,我想通过照片的URL从Firebase存储下载照片 当我将URL传递给GridViewAdapter时,照片为空。有空间,但没有图片。喜欢透明的图片 如果我传递在Google中找到的图像的URL,它可以工作,但与Firebase存储的URL不工作。怎么了 这就是我尝试从Firebase存储获取URL的方式 我正在获取包含所有URL的节点的DataSnapshot databaseReference.addValueEventListener(new ValueEven

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

当我将URL传递给GridViewAdapter时,照片为空。有空间,但没有图片。喜欢透明的图片

如果我传递在Google中找到的图像的URL,它可以工作,但与Firebase存储的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) {
                }
        });
my GridViewAdapter.class,getView方法

不带Firebase存储URL的屏幕视图:

具有Firebase存储URL的屏幕视图:


这是非常广泛的。将url传递给GridViewAdapter时,如何加载图像?或许可以上传您的代码,以便我们可以帮助您。

尝试将毕加索的withcontext.loadphotos.getposition.intoimageView更改为: 字符串url=photos.getposition; Picasso.withcontext.loadurl.intoimageView


另外:也许你从Firebase提交的照片url总是空的,你调试过吗

如果您的URL正确,ImageView会正确呈现另一幅图像,那么毕加索似乎产生了一些可能的问题:

缓存或下载程序有问题。看看这个话题,也许对你有帮助。 下载您的URL时出错。尝试将错误处理添加到毕加索链
更多详细信息

问题在于,我在负责显示图像的ImageView中设置了layout\u width和layout\u height的wrap\u content属性。早些时候,这张照片的高度非常非常大,我不知道为什么,这是造成问题的原因

注意:谷歌图片url的GridView分辨率为800x450,效果非常好,问题只出现在Firebase存储的照片上


问题部分解决了,因为如果我设置了固定大小的图像,它会显示图像,但我仍然有一些问题。。。例如,GridView有时在同一位置对两个图像进行分层,或者GridView的第一个元素没有加载。

。我和毕加索一起传递URL。首先我要做的是确保你的照片得到URL。Thrrow字符串photoURL=ds.getValueString.class上的断点;它正在获取url。我在Firebase实时数据库和ToastMessage中看到了它。如果我将URL直接从Firebase存储粘贴到Firebase数据库中,它是相同的,如果我将它粘贴到毕加索路径中,它也是相同的。空白图像。我不完全确定问题出在哪里。如果您有url并且正在传递给适配器。我要说的一件事是,为什么要在datachange上初始化gridview适配器?将其放在onCreate中并调用gridviewadapter.notifydatasetchanged处理问题的位置。调用gridViewAdapter.notifydatasetchanged;你调试过url了吗?然后试着去看我。浏览器是否正确?是的,我做了。它正确地保存在我的Firebase数据库中。如果我直接从Firebase数据库中的图像目录复制URL并将其粘贴到毕加索,则会得到相同的结果。我建议您将毕加索更改为Glide。我在毕加索库中遇到许多问题,Glide很快就解决了。也许毕加索的缓存有问题,或者下载时出错。我试过了。它并没有像我想象的那样改变。url是可以的。如果我将同一个URL粘贴到web浏览器中,它会工作;如果我将它粘贴到代码中,它不会工作。
@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;
    }
Picasso.with(context)
    .load(photos.get(position))
    .error(R.drawable.error_image)
    .placeholder(R.mipmap.ic_launcher)
    .into(imageView);