Использование системного кэша Android - PullRequest
2 голосов
/ 01 июня 2011

Я хотел бы использовать системный кеш Android при загрузке изображений в соответствии с этими предыдущими инструкциями: системный кеш Android .Мне удалось заставить работать следующий код, но операторы журнала говорят мне, что изображения никогда не читаются из кеша.

try {
    //url = new URL("http://some.url.com/retrieve_image.php?user=" + username);
    URL url = new URL("http://some.url.com/prof_pics/b4fe7bdfa174ff372c9f26ce6f78f19c.png");
    URLConnection connection = url.openConnection();
    connection.setUseCaches(true);
    Object response = connection.getContent();
    if (response instanceof Bitmap) {
        Log.i("CHAT", "this is a bitmap");
        current_image.setImageBitmap((Bitmap) response);
    }
    else {
        Log.i("CHAT", "this is not a bitmap");
        Log.i("CHAT", response.toString());
        InputStream is = connection.getInputStream();
        BufferedInputStream bis = new BufferedInputStream(is);
        current_image.setImageBitmap(BitmapFactory.decodeStream(bis));
    }
} catch (MalformedURLException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
}

Я пробовал два разных типа запросов: один - пройти через скрипт PHP, который возвращает изображение, и другой, который напрямую обращается к файлу изображения.Я обновляю одно и то же изображение несколько раз подряд, и кажется, что оно никогда не кэшируется.Для прямого доступа к изображению я получаю:

05-31 23:45:12.177 I/CHAT    ( 2995): this is not a bitmap
05-31 23:45:12.177 I/CHAT    ( 2995): org.apache.harmony.luni.internal.net.www.protocol.http.FixedLengthInputStream@40c1c660`

Для косвенного доступа к изображению я последовательно получаю:

05-31 23:45:14.550 I/CHAT    ( 2995): this is not a bitmap
05-31 23:45:14.550 I/CHAT    ( 2995): org.apache.harmony.luni.internal.net.www.protocol.http.ChunkedInputStream@40c02448

1 Ответ

4 голосов
/ 05 июня 2011

Я нашел лучший способ сделать это.Если у кого-то возникли проблемы после перехода по ссылке кэш системы Android , используйте вместо этого сообщение в блоге разработчика Google .Исходный код в этой записи блога предназначен для ListView, но я использую его для всех изображений.Он загружает изображение в AsyncTask, помещает временное изображение во время загрузки, и имеет кэш изображений .Эта последняя часть указана как «Future Item» в сообщении в блоге, но если вы загрузите исходный код, кеш будет реализован.Мне пришлось немного изменить код, потому что AndroidHttpClient не поддерживается в 2.1.Я переключил это на соединение URL.До сих пор это выглядит как класс для загрузки изображений.Будем надеяться, что это не повлияет на наши и без того сложные проблемы с управлением памятью.

...