Android 为什么下面代码中缓存中的位图返回null?
下面的代码应该将图像缓存到内存中,但每次我运行它时,缓存总是返回null。可能是什么问题?我使用的代码与Android开发者网站上的代码一模一样Android 为什么下面代码中缓存中的位图返回null?,android,android-lru-cache,Android,Android Lru Cache,下面的代码应该将图像缓存到内存中,但每次我运行它时,缓存总是返回null。可能是什么问题?我使用的代码与Android开发者网站上的代码一模一样 private lateinit var memoryCache: LruCache<String, Bitmap> fun load(imageUrl: String, imageView: ImageView) { val maxMemory = (Runtime.getRuntime().maxMemory() / 102
private lateinit var memoryCache: LruCache<String, Bitmap>
fun load(imageUrl: String, imageView: ImageView) {
val maxMemory = (Runtime.getRuntime().maxMemory() / 1024).toInt()
val cacheSize = maxMemory / 8
memoryCache = object : LruCache<String, Bitmap>(cacheSize) {
override fun sizeOf(key: String, bitmap: Bitmap): Int {
return bitmap.byteCount / 1024
}
}
CoroutineScope(IO).launch {
loadBitmap(imageUrl, imageView)
}
}
suspend fun loadBitmap(imageUrl: String, imageView: ImageView) {
val bitmap: Bitmap? = memoryCache[imageUrl]
if (bitmap != null) {
withContext(Dispatchers.Main) {
imageView.setImageBitmap(bitmap)
}
} else {
val url = URL(imageUrl)
val image = BitmapFactory.decodeStream(url.openConnection().getInputStream())
withContext(Dispatchers.Main) {
imageView.setImageBitmap(image)
}
memoryCache.put(imageUrl, image)
}
}
private lateinit var memoryCache:LruCache
乐趣加载(imageUrl:String,imageView:imageView){
val maxMemory=(Runtime.getRuntime().maxMemory()/1024).toInt()
val cacheSize=maxMemory/8
memoryCache=object:LruCache(cacheSize){
覆盖fun sizeOf(键:字符串,位图:位图):Int{
返回bitmap.byteCount/1024
}
}
协同观测(IO).发射{
加载位图(imageUrl、imageView)
}
}
暂停加载位图(imageUrl:String,imageView:imageView){
val位图:位图?=内存缓存[imageUrl]
if(位图!=null){
withContext(Dispatchers.Main){
设置图像位图(位图)
}
}否则{
val url=url(imageUrl)
val image=BitmapFactory.decodeStream(url.openConnection().getInputStream())
withContext(Dispatchers.Main){
设置图像位图(图像)
}
memoryCache.put(图像URL、图像)
}
}
你的memoryCache是空的。@blackapps thismemoryCache.put(imageUrl,image)
没有返回值吗?@blackapps显然没有。我甚至添加了。另外,为了在将该值放入缓存后显示该值,它什么也没有显示:注意:在本例中,八分之一的应用程序内存分配给我们的缓存。在普通/hdpi设备上,这是大约4MB(32/8)的最小值。在分辨率为800x480的设备上填充图像的全屏GridView将使用大约1.5MB(800*480*4字节),因此这将在内存中至少缓存大约2.5页的图像。
检查位图的大小。