android - 如何将 Firebase 中的图像检索到我的 android 应用程序中?
问题描述
我正在创建一个从 firebase 获取数据并显示它的 Android 应用程序。我成功地从 firebase 数据库中获取了文本数据,但我的图像没有出现。我坚信问题出在下面的适配器代码上
package ke.co.catalystseller;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import com.squareup.picasso.Picasso;
import java.util.List;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
public class ImageAdapter extends RecyclerView.Adapter<ImageAdapter.ImageViewHolder> {
private Context mContext;
private List<Uploads> mUploads;
public ImageAdapter(Context context, List<Uploads> uploads){
mContext = context;
mUploads = uploads;
}
public class ImageViewHolder extends RecyclerView.ViewHolder{
public TextView textViewName;
public ImageView imageView;
public TextView vendor;
public TextView vendorContact;
public ImageViewHolder(@NonNull View itemView) {
super(itemView);
textViewName = itemView.findViewById(R.id.item_name);
vendor = itemView.findViewById(R.id.seller_name);
vendorContact = itemView.findViewById(R.id.ucontact);
imageView = itemView.findViewById(R.id.m_image_view);
}
}
@NonNull
@Override
public ImageViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View v = LayoutInflater.from(mContext).inflate(R.layout.image_item,parent,false);
return new ImageViewHolder(v);
}
@Override
public void onBindViewHolder(@NonNull ImageViewHolder holder, int position) {
Uploads uploadCurrent = mUploads.get(position);
holder.textViewName.setText(uploadCurrent.getName());
holder.vendor.setText(uploadCurrent.getUser());
holder.vendorContact.setText(uploadCurrent.getContact());
Picasso.with(mContext)
.load(uploadCurrent.getImageUrl())
.placeholder(R.mipmap.ic_launcher)
.fit()
.centerCrop()
.into(holder.imageView);
}
@Override
public int getItemCount() {
return mUploads.size();
}
}
任何帮助将不胜感激
解决方案
尝试这个
将此方法放在您的视图持有者中
public void setImage(final Context c , final String imageUrl){
final ImageView imageView = (ImageView)mView.findViewById(R.id.m_image_view);
// This will save the image offline after downloading it once
Picasso.with(c)
.load(imageUrl)
.networkPolicy(NetworkPolicy.OFFLINE)
.resize(400, 300)
.error(R.drawable.ic_error_black_24dp)
.centerCrop()
.into(imageView, new Callback() {
@Override
public void onSuccess() {
}
@Override
public void onError() {
// Try again if cache failed
Picasso.with(c)
.load(imageUrl)
.error(R.drawable.ic_error_black_24dp)
.into(imageView);
}
});
}
在绑定中试试这个
protected void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
Uploads uploadCurrent = mUploads.get(position);
holder.textViewName.setText(uploadCurrent.getName());
holder.vendor.setText(uploadCurrent.getUser());
holder.vendorContact.setText(uploadCurrent.getContact());
holder.setImage(getApplicationContext(),uploadCurrent.getImageUrl());
}
完整代码
package ke.co.catalystseller;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import com.squareup.picasso.Picasso;
import java.util.List;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
public class ImageAdapter extends RecyclerView.Adapter<ImageAdapter.ImageViewHolder> {
private Context mContext;
private List<Uploads> mUploads;
public ImageAdapter(Context context, List<Uploads> uploads){
mContext = context;
mUploads = uploads;
}
public class ImageViewHolder extends RecyclerView.ViewHolder{
public TextView textViewName;
public ImageView imageView;
public TextView vendor;
public TextView vendorContact;
public ImageViewHolder(@NonNull View itemView) {
super(itemView);
textViewName = itemView.findViewById(R.id.item_name);
vendor = itemView.findViewById(R.id.seller_name);
vendorContact = itemView.findViewById(R.id.ucontact);
imageView = itemView.findViewById(R.id.m_image_view);
}
public void setImage(final Context c , final String imageUrl){
final ImageView imageView = (ImageView)mView.findViewById(R.id.m_image_view);
// This will save the image offline after downloading it once
Picasso.with(c)
.load(imageUrl)
.networkPolicy(NetworkPolicy.OFFLINE)
.resize(400, 300)
.error(R.drawable.ic_error_black_24dp)
.centerCrop()
.into(imageView, new Callback() {
@Override
public void onSuccess() {
}
@Override
public void onError() {
// Try again if cache failed
Picasso.with(c)
.load(imageUrl)
.error(R.drawable.ic_error_black_24dp)
.into(imageView);
}
});
}
}
@NonNull
@Override
public ImageViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View v = LayoutInflater.from(mContext).inflate(R.layout.image_item,parent,false);
return new ImageViewHolder(v);
}
@Override
public void onBindViewHolder(@NonNull ImageViewHolder holder, int position) {
Uploads uploadCurrent = mUploads.get(position);
holder.textViewName.setText(uploadCurrent.getName());
holder.vendor.setText(uploadCurrent.getUser());
holder.vendorContact.setText(uploadCurrent.getContact());
holder.setImage(getApplicationContext(),uploadCurrent.getImageUrl());
}
@Override
public int getItemCount() {
return mUploads.size();
}
}
推荐阅读
- python-3.x - IBAPI:公开竞价完成后如何下单?
- reactjs - 状态变化时如何防止 useQuery 运行?
- sql - 从原始查询中的周数获取周开始日期和周结束日期
- amazon-web-services - 如何配置我的 PUBLIC AWS 自定义域以解析为我的 VPC 配置的 lambda?
- ios - 处理组合中的错误(Swift、iOS)
- python - 匹配正则表达式中的行首(^ 返回空列表)
- python - 关键字“categorical_features”已弃用
- javascript - 如何在 React 中使用 Material-UI 覆盖 react-data-grid 样式
- java - 执行我用 JavaFX 编写的代码时出错
- java - 没有使用 Firebase 将数据导入我的回收站视图