
本文旨在解决 Android 开发中从 Firebase Firestore 获取图片 URL 并在 BaseAdapter 中显示图片的问题。通过结合 Firebase Storage 和 Glide 库,详细讲解如何从 Firestore 获取图片下载链接,并在 BaseAdapter 的 getView() 方法中使用 Glide 加载图片到 ImageView 中。文章提供了代码示例和注意事项,帮助开发者高效地实现图片加载功能。
首先,你需要确保你的 Firebase 项目已经设置好 Firebase Storage,并且图片已经上传到 Storage 中。Firestore 中存储的是图片的引用或下载 URL,而不是图片本身。
要从 Firestore 获取图片 URL,你需要使用 Firebase SDK 提供的 API。假设你的 Firestore 文档中有一个名为 imageUrl 的字段存储了图片的下载 URL,你可以这样获取:
FirebaseFirestore db = FirebaseFirestore.getInstance();
DocumentReference docRef = db.collection("your_collection").document("your_document_id");
docRef.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
@Override
public void onComplete(@NonNull Task<DocumentSnapshot> task) {
if (task.isSuccessful()) {
DocumentSnapshot document = task.getResult();
if (document.exists()) {
String imageUrl = document.getString("imageUrl");
// 现在你可以使用 imageUrl 来加载图片
} else {
Log.d("Firestore", "No such document");
}
} else {
Log.d("Firestore", "get failed with ", task.getException());
}
}
});这段代码首先获取 your_collection 集合中 your_document_id 文档的引用,然后异步获取文档数据。如果文档存在,则从文档中获取 imageUrl 字段的值。
获取到图片 URL 后,你需要在 BaseAdapter 的 getView() 方法中使用图片加载库(例如 Glide)来加载图片到 ImageView 中。
以下是修改后的 CustomAdapterLw 示例,展示了如何使用 Glide 加载图片:
package com.example.lazywarriorsapp;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import com.bumptech.glide.Glide;
import java.util.ArrayList;
public class CustomAdapterLw extends BaseAdapter {
private ArrayList<CustomListItemsLw> customListItemsLwArrayList = new ArrayList<>();
private Context context;
public CustomAdapterLw(Context context, ArrayList<CustomListItemsLw> customListItemsLwArrayList) {
this.context = context;
this.customListItemsLwArrayList = customListItemsLwArrayList;
}
@Override
public int getCount() {
return customListItemsLwArrayList.size();
}
@Override
public Object getItem(int position) {
return customListItemsLwArrayList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = LayoutInflater.from(context).inflate(R.layout.custom_list_item_lw, parent, false);
holder = new ViewHolder();
holder.imageView = convertView.findViewById(R.id.defaultImage);
holder.title = convertView.findViewById(R.id.customlisttitle);
holder.dongeupmyen = convertView.findViewById(R.id.dongeupmyen);
holder.needpoint = convertView.findViewById(R.id.needpoint);
holder.date = convertView.findViewById(R.id.date);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
CustomListItemsLw customListItemsLw = customListItemsLwArrayList.get(position);
// 使用 Glide 加载图片
Glide.with(context)
.load(customListItemsLw.getDefaultImage()) // 假设 CustomListItemsLw.getDefaultImage() 返回的是图片 URL
.into(holder.imageView);
holder.title.setText(customListItemsLw.getTitle());
holder.dongeupmyen.setText(customListItemsLw.getDongeupmyen());
holder.needpoint.setText(customListItemsLw.getNeedpoint());
holder.date.setText(customListItemsLw.getDate());
return convertView;
}
// ViewHolder 模式,提高 ListView 的性能
static class ViewHolder {
ImageView imageView;
TextView title;
TextView dongeupmyen;
TextView needpoint;
TextView date;
}
public void addItem(String imageUrl, String title, String dongeupmyen, String needpoint, String date) {
CustomListItemsLw item = new CustomListItemsLw();
item.setDefaultImage(imageUrl); // 存储 imageUrl
item.setTitle(title);
item.setDongeupmyen(dongeupmyen);
item.setNeedpoint(needpoint);
item.setDate(date);
customListItemsLwArrayList.add(item);
}
}关键的修改如下:
CustomListItemsLw 类示例:
package com.example.lazywarriorsapp;
public class CustomListItemsLw {
private String defaultImage; // 修改为 String 类型,存储图片 URL
private String title;
private String dongeupmyen;
private String needpoint;
private String date;
public String getDefaultImage() {
return defaultImage;
}
public void setDefaultImage(String defaultImage) {
this.defaultImage = defaultImage;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getDongeupmyen() {
return dongeupmyen;
}
public void setDongeupmyen(String dongeupmyen) {
this.dongeupmyen = dongeupmyen;
}
public String getNeedpoint() {
return needpoint;
}
public void setNeedpoint(String needpoint) {
this.needpoint = needpoint;
}
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
}在 Activity 中使用:
// 在你的 Activity 中,获取到 imageUrl 后
String imageUrl = "your_image_url"; // 从 Firestore 获取的图片 URL
cadapter.addItem(imageUrl,
snapshot.getData().get("title").toString()
+ "[" + snapshot.getData().get("joinperson").toString()
+ "/" + snapshot.getData().get("personalcount").toString() + "]",
snapshot.getData().get("dongeupmyen").toString(),
snapshot.getData().get("needpoint").toString() + "P",
simpleDateFormat.format(startDate) + " ~ " + simpleDateFormat.format(endDate) + " "
+ snapshot.getData().get("week").toString() + "per/week");本文详细介绍了如何从 Firestore 获取图片 URL 并在 BaseAdapter 中使用 Glide 加载图片。通过结合 Firebase SDK 和 Glide 库,你可以轻松地实现图片加载功能。记住要使用 ViewHolder 模式提高 ListView 的性能,并添加适当的错误处理机制。
以上就是从 Firestore 获取图片 URL 并在 BaseAdapter 中显示的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号