Мое приложение получает данные кэша до 40 МБ, как реализовать эти данные? [Дубликат]

Есть несколько хороших примеров для этого в R Wiki . Я украду пару здесь:

Метод слияния

Поскольку ваши ключи называются одинаковыми, короткий способ сделать внутреннее соединение - merge ():

merge(df1,df2)

полное внутреннее соединение (все записи из обеих таблиц) может быть создано с помощью ключевого слова «все»:

merge(df1,df2, all=TRUE)

левое внешнее соединение df1 и df2:

merge(df1,df2, all.x=TRUE)

правое внешнее объединение df1 и df2:

merge(df1,df2, all.y=TRUE)

вы можете перевернуть их, пощекотать их и протрите их, чтобы получить другие два внешних соединения, о которых вы спрашивали:)

Метод подстроки

Левое внешнее соединение с df1 слева с использованием метода подстроки будет:

df1[,"State"]<-df2[df1[ ,"Product"], "State"]

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

32
задан Rizwan Ahmed 28 May 2014 в 10:47
поделиться

4 ответа

Если вы ищете кеш для удаления своего собственного приложения, просто удалите кеш-каталог и все его выполнили!

public static void deleteCache(Context context) {
    try {
        File dir = context.getCacheDir();
        deleteDir(dir);
    } catch (Exception e) { e.printStackTrace();}
}

public static boolean deleteDir(File dir) {
    if (dir != null && dir.isDirectory()) {
        String[] children = dir.list();
        for (int i = 0; i < children.length; i++) {
            boolean success = deleteDir(new File(dir, children[i]));
            if (!success) {
                return false;
            }
        }
        return dir.delete();
    } else if(dir!= null && dir.isFile()) {
        return dir.delete();
    } else {
        return false;
    }
}
71
ответ дан dharam 21 August 2018 в 23:08
поделиться
  • 1
    где я вызываю deleteCache в моем коде? – Rizwan Ahmed 28 May 2014 в 13:07
  • 2
    В этом случае вы хотите удалить кеш приложения. может быть, он может в OnDestroy или где-то в вашем приложении сделать это – dharam 28 May 2014 в 13:08
  • 3
    этот код никогда не удаляет файлы. Когда dir.isDirectory () == false, он просто возвращает false. Поскольку вы не можете удалить непустой каталог, это не сработает. Вы должны добавить else: if (dir != null && dir.isDirectory()) { ... } else if(dir.isFile()) { return dir.delete(); } – Pierfrancesco Soffritti 5 October 2015 в 09:12
  • 4
    @Saty: нет, это не очищает общие настройки – Taifun 24 June 2016 в 17:46
  • 5
    Они пишут в документации, нам не нужны дополнительные разрешения для этого. «Приложения не требуют дополнительных разрешений для чтения или записи на возвращаемый путь, поскольку этот путь находится в их частном хранилище». [Д0] developer.android.com/reference/android/content/… – YTerle 6 August 2016 в 17:36

Ответ от dhams правилен (после нескольких раз редактировался), но, как показывают многие изменения кода, трудно написать правильный и надежный код для удаления каталога (с помощью sub-dirs) самостоятельно. Поэтому я настоятельно рекомендую использовать Apache Commons IO или какой-либо другой API, который сделает это для вас:

import org.apache.commons.io.FileUtils;

...

// Delete local cache dir (ignoring any errors):
FileUtils.deleteQuietly(context.getCacheDir());

PS: Также удалите каталог, возвращаемый context.getExternalCacheDir (), если вы используете это.

Чтобы иметь возможность использовать Apache Commons IO, добавьте это в свой файл build.gradle в dependencies:

compile 'commons-io:commons-io:2.4'
7
ответ дан Eirik W 21 August 2018 в 23:08
поделиться
  • 1
    Теперь строка компиляции в файле gradle будет implementation 'commons-io:commons-io:2.5'. Сначала я попробовал 2.6, но у меня есть некоторая ошибка, например noSuchMethodException, поэтому, пожалуйста, просто используйте версию 2.5. Последние версии здесь: mvnrepository.com/artifact/commons-io/commons-io – Juan Ignacio Avendaño Huergo 4 June 2018 в 21:07

Я не уверен, но я тоже сеял этот код. эта треска будет работать быстрее и, на мой взгляд, просто. просто загрузите каталог кеша приложений и удалите все файлы в каталоге

public boolean clearCache() {
    try {

        // create an array object of File type for referencing of cache files   
        File[] files = getBaseContext().getCacheDir().listFiles();

        // use a for etch loop to delete files one by one
        for (File file : files) {

             /* you can use just [ file.delete() ] function of class File
              * or use if for being sure if file deleted
              * here if file dose not delete returns false and condition will
              * will be true and it ends operation of function by return 
              * false then we will find that all files are not delete
              */
             if (!file.delete()) {
                 return false;         // not success
             }
        }

        // if for loop completes and process not ended it returns true   
        return true;      // success of deleting files

    } catch (Exception e) {}

    // try stops deleting cache files
    return false;       // not success 
}

Он получает все файлы кеша в массиве файлов getBaseContext (). getCacheDir (). listFiles (), а затем удаляет один за другим в цикл методом file.delet ()

1
ответ дан Javid 21 August 2018 в 23:08
поделиться
  • 1
    Кодовые ответы не рекомендуется, потому что они не объясняют, как они решают проблему. Пожалуйста, обновите свой ответ, чтобы объяснить, как это улучшается на других принятых и поддержанных ответах, которые уже есть у этого вопроса, и удалить несколько экземпляров недопустимого текста в коде («введите код здесь»). Пожалуйста, просмотрите Как написать хороший ответ . – FluffyKitten 24 September 2017 в 02:23

Я думаю, вы должны помещать clearApplicationData() перед super.OnDestroy().

. Ваше приложение не может обрабатывать какие-либо методы, когда он был отключен.

4
ответ дан Nilesh Rathod 21 August 2018 в 23:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: