我有两个主要问题。
我的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
请帮帮我。抱歉英语不好。
答案 0 :(得分:85)
在Android 6.0中,谷歌添加了一项名为“自动备份”的新功能。
启用此选项(默认打开)后,Android系统几乎会复制系统创建的所有目录和文件,并将其上传到用户的Google云端硬盘帐户。
当用户重新安装应用程序时,Android会自动恢复应用程序的数据,无论它是如何安装的(通过Play商店,adb安装,初始设备设置)。
恢复操作发生在安装APK之后,但在应用程序可供用户启动之前。
android开发者页面: https://developer.android.com/guide/topics/data/autobackup.html
答案 1 :(得分:4)
当我在寻找与GreenDao相关的类似问题的解决方案时,我突然解决了这个问题 - 这里稍微深入一些答案,但基本上如果你在api 23上你需要将allowBackup设置为false以便能够依赖在卸载时清除的数据库
答案 2 :(得分:3)
答案 3 :(得分:2)
What happens to a Sqlite database when app is removed
您的数据库是否正常工作(除了删除应用时不删除)?
如果工作不正常,您可能需要查看:
http://developer.android.com/reference/android/database/sqlite/SQLiteOpenHelper.html
虽然这不一定与您的问题有关,但您可能需要考虑为您的数据库创建open()
和close()
,并在每个{{1}中使用SQLiteOpenHelper
个对象您将使用open()
,而sqliteopenhelperObj.getWriteableDatabase()
则使用close()
。
http://developer.android.com/reference/android/database/sqlite/SQLiteOpenHelper.html#close
编辑:
答案 4 :(得分:0)
可以通过在android:allowBackup="false"
AndroidManifest.xml
来停用自动备份