Подтвердить что ты не робот

База данных не удаляется при удалении приложения Android

У меня есть два основных вопроса.

  • База данных не удаляется при удалении приложения.
  • Загруженные файлы не будут удаляться при нестабильном приложении.

В моем приложении Android есть база данных. Я создаю его с помощью java

class as follows.

public DataBaseHelper(Context context) {
    super(context, DATABASE_NAME, null, DATABASE_VERSION);
}

public DataBaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version, DatabaseErrorHandler errorHandler) {
    super(context, name, factory, version, errorHandler);
}

@Override
public void onCreate(SQLiteDatabase db) {
    // creating required tables
    db.execSQL(CREATE_TABLE_QUOTES);
    db.execSQL(CREATE_TABLE_FILTERS);
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    // on upgrade drop older tables
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_QUOTES);
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_QUOTES);
    // create new tables
    onCreate(db);
}

В коде базы данных нет определенного пути.

Это код, как я загружаю файлы. И есть конкретный путь, но не разрешено создавать папку в Android > data > com.myapp.

public String downloadImage(String img_url, int i) {
        File sdCard = Environment.getExternalStorageDirectory();
        File dir = new File (sdCard.getAbsolutePath() + "/fog/images/filters");
        // Make sure the Pictures directory exists.
        dir.mkdirs();
        File destinationFile = new File(dir, "filter"+i);
        String filepath = null;
        try{
            URL url = new URL("http://fog.wrapper.io/uploads/category/"+img_url+".png");

            HttpURLConnection conection = (HttpURLConnection)url.openConnection();
            conection.setRequestMethod("GET");
            conection.setRequestProperty("Content-length", "0");
            conection.setUseCaches(false);
            conection.setAllowUserInteraction(false);
            conection.connect();

            int status = conection.getResponseCode();

            switch (status) {
                case 200:
                case 201:
                    FileOutputStream fileOutput = new FileOutputStream(destinationFile);
                    InputStream inputStream = conection.getInputStream();
                    int totalSize = conection.getContentLength();
                    int downloadedSize = 0;
                    byte[] buffer = new byte[1024];
                    int bufferLength = 0;
                    while ( (bufferLength = inputStream.read(buffer)) > 0 )
                    {
                        fileOutput.write(buffer, 0, bufferLength);
                        downloadedSize += bufferLength;                            Log.i("Progress:","downloadedSize:"+downloadedSize+"totalSize:"+ totalSize) ;
                    }
                    fileOutput.close();
                    if(downloadedSize==totalSize) filepath = destinationFile.getPath();
                   Log.i("filepath:"," "+filepath) ;
                    return filepath;
            }

        } catch (IOException e) {
            Log.d("ImageManager", "Error: " + e);
        }
        return null;
    }
} // Get filters

Пожалуйста, помогите мне. Извините за плохой английский.

4b9b3361

Ответ 1

в Android 6.0, Google добавила новую функцию под названием "Автозагрузка".

когда эта опция включена (по умолчанию включено), система Android копирует почти все каталоги и файлы, созданные системой, и загружает их в учетную запись пользователя Google.

Когда пользователь переустанавливает приложение, андроид автоматически восстанавливает данные приложения, независимо от того, как он был установлен (через Play Store, установка adb, настройка начального устройства).

Операция восстановления происходит после установки APK, но до того, как приложение будет запущено пользователем.

Страница разработчиков Android: https://developer.android.com/guide/topics/data/autobackup.html

Ответ 2

  • Взгляните на этот ответ SO:

Что происходит с базой данных Sqlite при удалении приложения

  1. Работает ли ваша БД (не удаляя при удалении приложения)?

  2. Если он не работает должным образом, вы можете взглянуть на:

http://developer.android.com/reference/android/database/sqlite/SQLiteOpenHelper.html

Хотя это не обязательно связано с вашей проблемой, вам может потребоваться создать open() и close() для вашей БД и использовать объект SQLiteOpenHelper в каждом - в open(), вы должны использовать sqliteopenhelperObj.getWriteableDatabase() и в close() вы использовали бы sqliteopenhelperObj.close().

http://developer.android.com/reference/android/database/sqlite/SQLiteOpenHelper.html#close

Edit:

  1. Если вы загрузили файлы на свое устройство во время тестирования приложения и хотите их удалить, вы можете использовать Device Monitor в Android Studio https://developer.android.com/tools/help/monitor.html Там есть файловый менеджер, который позволит вам видеть и редактировать файлы на ваших устройствах. Вы также можете сделать это в командной строке с помощью ADB (Android Debug Bridge) https://developer.android.com/tools/help/adb.html

Ответ 3

Я рассматриваю этот вопрос, когда искал решение аналогичной проблемы, связанной с GreenDao, - немного более подробно ответьте здесь, но в основном, если вы на api 23 вам нужно установить allowBackup в false, чтобы быть в состоянии зависеть при очистке баз данных при удалении

fooobar.com/info/313764/...