Я пытаюсь перевести этот кусок кода с Java на Kotlin.Однако я борюсь с «супер» вызовом второго конструктора, который получает целое число в качестве аргумента.
package info.androidhive.volleyexamples.volley.utils;
import com.android.volley.toolbox.ImageLoader.ImageCache;
import android.graphics.Bitmap;
import android.support.v4.util.LruCache;
public class LruBitmapCache extends LruCache<String, Bitmap> implements
ImageCache {
public static int getDefaultLruCacheSize() {
final int maxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024);
final int cacheSize = maxMemory / 8;
return cacheSize;
}
public LruBitmapCache() {
this(getDefaultLruCacheSize());
}
public LruBitmapCache(int sizeInKiloBytes) {
super(sizeInKiloBytes);
}
@Override
protected int sizeOf(String key, Bitmap value) {
return value.getRowBytes() * value.getHeight() / 1024;
}
@Override
public Bitmap getBitmap(String url) {
return get(url);
}
@Override
public void putBitmap(String url, Bitmap bitmap) {
put(url, bitmap);
}
}
Я сделал это до сих пор.Как видите, LruCache обязывает вас передать что-то в качестве аргумента.Но я хочу вычислить этот аргумент с помощью метода "getDefaultLruCacheSize".
class LruBitmapCache(var maxSize: Int = 0) : LruCache<String, Bitmap>(maxSize), ImageCache {
private fun getDefaultLruCacheSize(): Int {
val maxMemory = (Runtime.getRuntime().maxMemory() / 1024).toInt()
return maxMemory / 8
}
init {
maxSize = getDefaultLruCacheSize()
}
override fun sizeOf(key: String?, value: Bitmap?): Int = if (value != null) {
(value.rowBytes * value.height / 1024)
} else{
val defaultValue = 1
defaultValue
}
override fun getBitmap(url: String?): Bitmap? = get(url)
override fun putBitmap(url: String?, bitmap: Bitmap?) {
put(url, bitmap)
}
Проблема в том, что при моем текущем подходе super вызывается перед моим методом init.