Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/200.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 为什么下面代码中缓存中的位图返回null?_Android_Android Lru Cache - Fatal编程技术网

Android 为什么下面代码中缓存中的位图返回null?

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

下面的代码应该将图像缓存到内存中,但每次我运行它时,缓存总是返回null。可能是什么问题?我使用的代码与Android开发者网站上的代码一模一样

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 this
memoryCache.put(imageUrl,image)
没有返回值吗?@blackapps显然没有。我甚至添加了。另外,为了在将该值放入缓存后显示该值,它什么也没有显示:
注意:在本例中,八分之一的应用程序内存分配给我们的缓存。在普通/hdpi设备上,这是大约4MB(32/8)的最小值。在分辨率为800x480的设备上填充图像的全屏GridView将使用大约1.5MB(800*480*4字节),因此这将在内存中至少缓存大约2.5页的图像。
检查位图的大小。