Удаленный кэшированный файл из DiskLruCache - PullRequest
0 голосов
/ 22 ноября 2018

Я реализовал кэширование файлов на андроиде с помощью DiskLruCache Джейка Уортона.Это моя реализация кэширования:

@Override
protected FileInputStream doInBackground(String... params) {
    String data = params[0];
    // Application class where i did open DiskLruCache
    DiskLruCache cache = MyApplication.getDiskCache(context);
    if (cache == null)
        return null;
    String key = hashKeyForDisk(data);
    final int DISK_CACHE_INDEX = 0;
    long currentMaxSize = cache.getMaxSize();
    float percentageSize = Math.round((cache.size() * 100.0f) / currentMaxSize);
    if (percentageSize >= 90) // cache size reaches 90%
        cache.setMaxSize(currentMaxSize + (10 * 1024 * 1024)); // increase size to 10MB
    try {
        DiskLruCache.Snapshot snapshot = cache.get(key);
        if (snapshot == null) {
            Log.i(getTag(), "Snapshot is not available downloading...");
            DiskLruCache.Editor editor = cache.edit(key);
            if (editor != null) {
                if (downloadUrlToStream(data, editor.newOutputStream(DISK_CACHE_INDEX)))
                    editor.commit();
                else
                    editor.abort();
            }
            snapshot = cache.get(key);
        } else
            Log.i(getTag(), "Snapshot found sending");
        if (snapshot != null)
            return (FileInputStream) snapshot.getInputStream(DISK_CACHE_INDEX);
    } catch (IOException e) {
        e.printStackTrace();
    }
    Log.i(getTag(), "File stream is null");
    return null;
}

public boolean downloadUrlToStream(String urlString, OutputStream outputStream) {
    HttpURLConnection urlConnection = null;
    try {
        final URL url = new URL(urlString);
        urlConnection = (HttpURLConnection) url.openConnection();
        InputStream stream = urlConnection.getInputStream();
        // you can use BufferedInputStream and BufferOuInputStream
        IOUtils.copy(stream, outputStream);
        IOUtils.closeQuietly(outputStream);
        IOUtils.closeQuietly(stream);
        Log.i(getTag(), "Stream closed all done");
        return true;
    } catch (final IOException e) {
        e.printStackTrace();
    } finally {
        if (urlConnection != null)
            IOUtils.close(urlConnection);
    }
    return false;
}

Теперь моя проблема заключается в том, как удалить определенный файл из кэша?Есть ли какие-то методы, которые мне не хватает на снимке или на стороне редактора lruCache?Заранее спасибо.

...