我正在开发一个显示从我的Firebase数据库加载的图像的应用程序。我为此目的使用了Glide。
我正在使用一个按钮,单击该按钮将打开一个新活动,该活动显示从url提取的图像。如果url正确加载,则图像完美加载,但是如果我在两者之间取消,则应用崩溃。为什么会发生,还有,是否有任何选择可以使用滑行将图像保存在缓存中,以便它可以加载一次并显示,而无需从firebase提取。
这是我的代码,用于显示来自网址的图片:
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);
}
});
}
这是错误日志,当我在图像完全加载之前关闭活动时。
请询问是否需要其他详细信息。
答案 0 :(得分:1)
您可以使用Glide缓存图像加载。我指的是tutorial here,在这里您可以学习使用Glide进行图像缓存的基础知识。
现在有关崩溃的问题,它清楚地表明您正在尝试从已被破坏的活动中加载某些内容。当您在加载图像的位置添加了Firebase侦听器时,您需要在离开活动时销毁该侦听器。
您可以考虑使用onPause
,onDestroy
函数来处理删除侦听器操作。检查Firebase的removeEventListener
功能。
但是,我建议使用加载程序的活动范围版本,以便Firebase任务自行处理这些事情。请参阅answer here。