【问题标题】:Loading Image in Image View using Glide使用 Glide 在 Image View 中加载图像
【发布时间】:2019-02-01 00:04:49
【问题描述】:

我正在开发一个显示从我的 firebase 数据库加载的图像的应用程序。为此,我使用了 Glide。

我正在使用一个按钮,单击该按钮将打开一个新活动,其中显示从 url 获取的图像。如果 url 正确加载,图像加载完美,但如果我在两者之间取消,则应用程序崩溃。为什么会发生,还有,是否有任何选项可以使用 glide 将图像保存在缓存中,以便它可以加载一次并显示而无需从 firebase 获取它。

这是我从 url 显示图像的代码:

public void showImage(){
    mStorageRef.child("TimeTable").getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
        @Override
        public void onSuccess(Uri uri) {
            url = uri.toString();
            RequestOptions options = new RequestOptions().centerCrop().placeholder(R.mipmap.ic_launcher).error(R.mipmap.ic_launcher_round);
            Toast.makeText(TimeTable.this, uri.toString(),Toast.LENGTH_SHORT).show();
            Glide.with(TimeTable.this).load(url).apply(options).into(image);
        }
    });
}

这是错误日志,当我在图像完全加载之前关闭活动时..

请询问是否需要更多详细信息。

【问题讨论】:

  • 请包含您的错误日志
  • 你使用的是哪个版本的 glide
  • @Badran 错误日志已添加。我正在使用 Glide 4.8.0
  • “但如果我在这两者之间取消,应用程序就会崩溃”。什么意思,能不能显示取消请求的代码?
  • 不是你的glide问题而是你的编程逻辑,你销毁后调用load方法

标签: java android firebase firebase-storage android-glide


【解决方案1】:

您可以使用 Glide 缓存加载的图像。我指的是tutorial here,您可以在其中学习使用 Glide 进行图像缓存的基础知识。

现在关于崩溃问题,它清楚地表明您正在尝试从已经被破坏的活动中加载一些东西。由于您在加载图像的位置添加了一个 firebase 侦听器,因此您需要在离开活动时销毁该侦听器。

您可以考虑使用onPauseonDestroy 函数来处理删除侦听器操作。检查 Firebase 的 removeEventListener 功能。

但是,我建议使用加载器的活动范围版本,以便 Firebase 任务自行处理这些事情。请参阅answer here

【讨论】:

  • 是的。我尝试了活动范围的版本。它现在没有崩溃。谢谢你的帮助。但是缓存不适用于您提供的教程。
  • 很高兴知道我可以提供帮助。缓存策略可能会因 Glide 中的版本变化而改变。如果这有帮助,请接受答案。谢谢。
猜你喜欢
  • 2020-03-24
  • 1970-01-01
  • 2016-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-23
  • 2017-12-17
相关资源
最近更新 更多