卸载Android应用程序时数据库不会被删除

我有两个主要问题。

  1. 卸载应用程序时,数据库不会被删除。
  2. 下载的文件不会删除,而不稳定的应用程序。

在我的android应用程序中有一个数据库。 我用java创build它

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); } 

在数据库的代码中没有定义特定的path。

这是我如何下载文件的代码。 并有具体的path,但不允许在Android> data> com.myapp中创build文件夹。

 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 

请帮帮我。 对不起,英语不好。

在Android 6.0中,谷歌添加了一个名为自动备份的新function。

当这个选项开启时(默认为开启),Android系统几乎复制系统创build的每个目录和文件,并将其上传到用户的谷歌帐户。

当用户重新安装应用程序时,android会自动恢复应用程序的数据,不pipe它是如何安装的(通过Play商店,adb安装,初始设备设置)。

还原操作发生在安装APK之后,但在应用程序可供用户启动之前。

Android开发者页面: https : //developer.android.com/guide/topics/data/autobackup.html

  1. 看看这个SO回答:

当应用程序被删除时,Sqlite数据库会发生什么情况

  1. 你的数据库是否工作(除了删除应用程序时不删除)?

  2. 如果工作不正常,你可能要看看:

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

虽然这不一定与你的问题有关,但是你可能要考虑为你的数据库创build一个open()close() ,并且在open()使用一个SQLiteOpenHelper对象 – 你可以使用sqliteopenhelperObj.getWriteableDatabase() close()你会使用sqliteopenhelperObj.close()

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

编辑:

  1. 如果您在testing应用程序的过程中已经将文件下载到您的设备,而您想删除它们,则可以使用Android Studio中的设备监视器https://developer.android.com/tools/help/monitor.html有一个文件pipe理器,将允许您查看和编辑您的设备上的文件。 您也可以在命令行上使用ADB(Android Debug Bridge) https://developer.android.com/tools/help/adb.html

当我正在寻找一个与GreenDao有关的类似问题的解决scheme时,我猜这个问题 – 稍微更深入的回答,但基本上,如果你的API 23你需要设置allowBackup为false,以便能够依赖于数据库卸载时会被清除

https://stackoverflow.com/a/43046256/5298819