20

デフォルトのパスではなくSDカードにsqliteデータベースを作成したい... SDカードからすべてのデータにアクセスしたい また、このコードを使用しました:

            private static class OpenHelper extends SQLiteOpenHelper {

    OpenHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
        SQLiteDatabase.openOrCreateDatabase("/sdcard/"+DATABASE_NAME,null);

    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("CREATE TABLE "
                + TABLE_NAME
                + " (id INTEGER PRIMARY KEY, name TEXT, number TEXT, skypeId TEXT, address TEXT, image BLOB)");
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
        onCreate(db);
    }
}

問題:

デフォルト パスにデータベース ファイルが表示されると、すべてのデータとテーブルが表示されますが、SD カードに作成されたデータベース ファイルが表示されると、データは表示されず、データベース ファイルのみが表示されます

コンストラクターでは、SDカードにファイルを作成するだけですが、デフォルトのパスではすべてうまくいきます.....さらにアクセスするためにすべてのSqlitedataをSDカードに保存するにはどうすればよいですか?

4

6 に答える 6

44

でDBを作成しました

    public DatabaseHelper(final Context context) {
    super(context, Environment.getExternalStorageDirectory()
            + File.separator + FILE_DIR
            + File.separator + DATABASE_NAME, null, DATABASE_VERSION);
}

その後も問題はありませんでした。super() への呼び出しもsdcardを参照する必要があると思います。

于 2013-01-17T07:15:53.583 に答える
2

通話で不完全な名前を指定していsuper()ます。使用してみてください:

OpenHelper(Context context) {
    super(context, "/sdcard/"+DATABASE_NAME, null, DATABASE_VERSION);
    SQLiteDatabase.openOrCreateDatabase("/sdcard/"+DATABASE_NAME,null);

}

それ以外は、常に を使用Environment.getExternalStoreDirectory()して外部ストレージへのパスを取得する必要があり、使用する前に外部ストレージの状態も確認する必要があります。

于 2013-01-17T07:17:14.233 に答える
1
public DataBaseHelper(final Context context) {

    super(context, Environment.getExternalStorageDirectory()
    + File.separator+ MYDATABASE_NAME, null, MYDATABASE_VERSION);
}

**Also Add permission in android Manifest
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />**
于 2015-03-11T06:47:50.903 に答える
0

Android 6.0 (API レベル 23) 以降、ユーザーはアプリのインストール時ではなく、アプリの実行中にアプリにアクセス許可を付与します。このアプローチでは、ユーザーがアプリをインストールまたは更新するときにアクセス許可を付与する必要がないため、アプリのインストール プロセスが合理化されます。

実行時にパーミッションを取得するには、ユーザーをリクエストする必要があります。次の方法でそれを行うことができます。

権限の最初の要求。

String[] permissions = {Manifest.permission.WRITE_EXTERNAL_STORAGE};
        requestPermissions(permissions, WRITE_REQUEST_CODE);

そして、あなたは結果をチェックすることができます

@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
    switch (requestCode) {
       case WRITE_REQUEST_CODE:
         if(grantResults[0] == PackageManager.PERMISSION_GRANTED){
           //Permission granted.
           //Continue with writing files...
         }
       else{
           //Permission denied.
         }
        break;
    }
}

ここに良い学習ソースがあります requesting-runtime-permissions-in-android-marshmallow/

于 2018-05-08T21:40:28.773 に答える