首页 > Java > java教程 > 正文

从 Firestore 获取图片 URL 并在 BaseAdapter 中显示

心靈之曲
发布: 2025-09-10 11:22:33
原创
860人浏览过

从 firestore 获取图片 url 并在 baseadapter 中显示

本文旨在解决 Android 开发中从 Firebase Firestore 获取图片 URL 并在 BaseAdapter 中显示图片的问题。通过结合 Firebase Storage 和 Glide 库,详细讲解如何从 Firestore 获取图片下载链接,并在 BaseAdapter 的 getView() 方法中使用 Glide 加载图片到 ImageView 中。文章提供了代码示例和注意事项,帮助开发者高效地实现图片加载功能。

从 Firestore 获取图片 URL

首先,你需要确保你的 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 字段的值。

在 BaseAdapter 中使用 Glide 加载图片

获取到图片 URL 后,你需要在 BaseAdapter 的 getView() 方法中使用图片加载库(例如 Glide)来加载图片到 ImageView 中。

以下是修改后的 CustomAdapterLw 示例,展示了如何使用 Glide 加载图片:

存了个图
存了个图

视频图片解析/字幕/剪辑,视频高清保存/图片源图提取

存了个图 17
查看详情 存了个图
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);
    }
}
登录后复制

关键的修改如下:

  1. 修改 addItem 方法: 将 addItem 方法的第一个参数类型从 Drawable 改为 String,用于接收图片 URL。
  2. 修改 CustomListItemsLw 类: 确保 CustomListItemsLw 类中的 defaultImage 字段类型为 String,用于存储图片 URL。
  3. 使用 Glide 加载图片: 在 getView() 方法中,使用 Glide.with(context).load(imageUrl).into(imageView) 来加载图片。

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");
登录后复制

注意事项

  • 图片加载库: Glide 是一个强大的图片加载库,可以自动处理图片缓存、压缩等优化。你也可以选择其他图片加载库,如 Picasso。
  • ViewHolder 模式: 使用 ViewHolder 模式可以避免每次 getView() 方法都 findViewById,提高 ListView 的性能。
  • Context: 确保在 Glide 中使用正确的 Context。通常情况下,使用 parent.getContext() 或 Activity 的 Context 都可以。
  • 错误处理: 在实际应用中,应该添加错误处理机制,例如当图片加载失败时显示默认图片。
  • 异步加载: 图片加载是一个耗时操作,应该在后台线程中进行,避免阻塞 UI 线程。Glide 已经做了异步处理,所以通常不需要手动处理。
  • URL 安全: 确保从 Firestore 获取的 URL 是有效的,并且用户有权限访问。
  • 数据类型匹配: 确保传递给 addItem 方法的数据类型与方法签名匹配。

总结

本文详细介绍了如何从 Firestore 获取图片 URL 并在 BaseAdapter 中使用 Glide 加载图片。通过结合 Firebase SDK 和 Glide 库,你可以轻松地实现图片加载功能。记住要使用 ViewHolder 模式提高 ListView 的性能,并添加适当的错误处理机制。

以上就是从 Firestore 获取图片 URL 并在 BaseAdapter 中显示的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号