web-dev-qa-db-ja.com

Androidアプリケーションをアンインストールしてもデータベースは削除されません

2つの大きな質問があります。

  1. アプリをアンインストールしてもデータベースは削除されません。
  2. アプリを不安定にしている間、ダウンロードしたファイルは削除されません。

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

私を助けてください。悪い英語でごめんなさい。

42
KZoNE

in Android 6.0、googleは自動バックアップと呼ばれる新しい機能を追加しました。

このオプションがオン(デフォルトはオン)の場合、Android systemはシステムによって作成されたほぼすべてのディレクトリとファイルをコピーし、ユーザーのGoogleドライブアカウントにアップロードします。

ユーザーがアプリを再インストールすると、Androidアプリのデータは、Playストア、adbインストール、初期デバイスセットアップを介して)インストール方法に関係なく自動的に復元されます。

復元操作は、APKがインストールされた後、ユーザーがアプリを起動できるようになる前に発生します。

Android開発者ページ: https://developer.Android.com/guide/topics/data/autobackup.html

94
yeonseok.seo

GreenDaoに関連する同様の問題の解決策を探していたときにこの質問を見つけました-基本的にはAPI 23でデータベースに依存できるようにallowBackupをfalseに設定する必要がありますアンインストールするとクリアされます

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

4
Michael.

これが個人アカウントであり、テストのためにバックアップを削除する必要がある場合は、アカウントのdrive.google.comにアクセスして、バックアップセクションに移動できます。

バックアップを選択すると、特定のデバイスのバックアップを削除するオプションが表示されます。

Select backups and then a backup to delete

3
dazza5000
  1. これを見てくださいSO answer:

アプリが削除されるとSqliteデータベースはどうなりますか

  1. DBは機能しますか(アプリを削除するときに削除しないことを除く)。

  2. 正常に動作しない場合は、次をご覧ください。

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

これは必ずしもあなたの問題に関連するわけではありませんが、DBのopen()close()を作成し、それぞれのopen()SQLiteOpenHelperオブジェクトを使用することを検討してください。 、sqliteopenhelperObj.getWriteableDatabase()を使用し、close()sqliteopenhelperObj.close()を使用します。

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

編集:

  1. アプリのテスト中にファイルをデバイスにダウンロードしていて、それらを削除する場合は、Android Studio https:// developer.Android.com/tools/help/monitor.html デバイス上のファイルを表示および編集できるファイルマネージャーがありますADB(Android Debug Bridge)を使用してコマンドラインでこれを行うこともできます https://developer.Android.com/tools/help/adb.html
2
robkriegerflow

Android:allowBackup="false"AndroidManifest.xmlを設定すると、自動バックアップを無効にできます

0
FLash