【发布时间】:2021-10-31 08:44:05
【问题描述】:
我正在尝试将图像从我的 Firebase 存储和实时数据库显示到我的 Android 应用程序中的 CardView。我已将图像保存到 Firebase 存储并作为特定用户(狗)下的 Url 节点。 CardView 显示在每个所有者名下注册的狗,每只狗基本上都有自己的个人资料图片.. 我想在 UI 上显示。
我正在使用 Picasso,因为它在我找到的教程中使用,并且似乎正在工作,但是它试图在我的 DogUserAdapter 中找到“上下文”,它返回 null。我以前没有使用上下文上下文,因为我在这个特定的 CardView 上使用了回调函数。我还能在这里使用什么来显示数据库中的图像?
DogUserAdapter
public class DogUserAdapter extends FirebaseRecyclerAdapter<Dog, DogUserAdapter.DogViewHolder> {
private DogCallback dogCallback;
private Context context;
public DogUserAdapter(@NonNull FirebaseRecyclerOptions<Dog> options, @NonNull final DogCallback dogCallback) {
super(options);
this.dogCallback = dogCallback;
this.context = context;
}
@Override
protected void onBindViewHolder(@NonNull DogViewHolder holder, int position, @NonNull Dog model) {
holder.dogName.setText(model.getName());
Picasso.with(context)
.load(model.getImageUrl())
.into(holder.dogImage);
holder.cardView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dogCallback.onCardViewClick(model);
}
});
}
@NonNull
@Override
public DogViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.dog, parent, false);
return new DogUserAdapter.DogViewHolder(view);
}
public class DogViewHolder extends RecyclerView.ViewHolder {
TextView dogName;
ImageView dogImage;
CardView cardView;
public DogViewHolder(@NonNull View itemView) {
super(itemView);
dogName = itemView.findViewById(R.id.dogName);
dogImage = itemView.findViewById(R.id.dogImage);
cardView = itemView.findViewById(R.id.card_view_dog);
}
}
public interface DogCallback{
void onCardViewClick(final Dog dog);
}
}
卡片视图
Firebase 层次结构
【问题讨论】:
-
据我所知,使用毕加索不需要上下文。 Picasso.get().load(model.getImageUrl()).into(holder.dogImage);
-
在哪一行代码中,上下文为空?
-
我尝试了
get(),但没有成功。get()是红色的,添加任何形式的上下文都会返回 null。我可以在常规活动中正常使用它,但不幸的是在我的adapter中不能使用它。我现在选择只使用静态图像,但可能会在周末再试一次
标签: java android firebase firebase-realtime-database firebase-storage