我有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:
带有Firebase存储URL的ScreenView:
答案 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可以正确渲染其他图像,那么看来毕加索可能会产生一些问题:
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的第一个元素正在加载。