Ich habe zwei Hauptfragen.
In meiner Android-Anwendung gibt es eine Datenbank. Ich erstelle es mit 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);
}
Im Code für die Datenbank ist kein bestimmter Pfad definiert.
Mit diesem Code lade ich Dateien herunter. Und es gibt einen bestimmten Pfad. Es ist jedoch nicht zulässig, Ordner in Android> data> com.myapp zu erstellen.
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
Bitte hilf mir. Entschuldige mein schlechtes Englisch.
in Android 6.0 hat Google die neue Funktion Auto Backup hinzugefügt.
wenn diese Option aktiviert ist (Standardeinstellung ist aktiviert), kopiert das Android-System fast alle Verzeichnisse und Dateien, die vom System erstellt wurden, und lädt es in das Google-Laufwerkskonto des Benutzers hoch.
Wenn der Benutzer die App erneut installiert, stellt Android die App-Daten unabhängig von der Art der Installation automatisch wieder her (über Play Store, Adb-Installation, erstmaliges Einrichten des Geräts).
Der Wiederherstellungsvorgang wird ausgeführt, nachdem der APK installiert wurde, aber bevor die App vom Benutzer gestartet werden kann.
Android-Entwicklerseite: https://developer.Android.com/guide/topics/data/autobackup.html
Ich kam über diese Frage hinweg, als ich nach einer Lösung für ein ähnliches Problem in Bezug auf GreenDao suchte - eine etwas ausführlichere Antwort hier. Wenn Sie jedoch auf api 23 klicken, müssen Sie allowBackup auf false setzen, um von den Datenbanken abhängig zu sein wird bei der Deinstallation gelöscht
Was passiert mit einer Sqlite-Datenbank, wenn eine App entfernt wird
Funktioniert Ihre Datenbank (außer beim Löschen der App nicht gelöscht)?
Wenn es nicht richtig funktioniert, sollten Sie einen Blick auf Folgendes werfen:
http://developer.Android.com/reference/Android/database/sqlite/SQLiteOpenHelper.html
Obwohl dies nicht unbedingt mit Ihrem Problem zusammenhängt, möchten Sie möglicherweise in Erwägung ziehen, open()
und close()
für Ihre Datenbank zu erstellen und in jedem - in open()
ein SQLiteOpenHelper
-Objekt zu verwenden. In sqliteopenhelperObj.getWriteableDatabase()
und close()
verwenden Sie sqliteopenhelperObj.close()
.
http://developer.Android.com/reference/Android/database/sqlite/SQLiteOpenHelper.html#close
Bearbeiten:
Die automatische Sicherung kann deaktiviert werden, indem Sie Android:allowBackup="false"
in AndroidManifest.xml
einstellen.