1

Eclipse + ADT を使用して sqlite db を読み書きするアプリを作成しました。Android 端末エミュレーターでは正常に動作しますが、電話自体から実行すると、db からスピナーが読み込まれません。つまり、見つからないことを意味します。内部メモリに db がある場合、db が電話上にあり、そこにあるかどうかを adb shell で既に確認したので、db を使用できるようにアプリにルート権限を与える必要があると思いますが、どうすればこれを行うことができますか? 私の電話は Motorola Defy で、ルート化されています。

編集:これは、テーブルを作成するための私のクラスであり、メソッド onCreate および onUpdate を追加します。

public class passwordSQLiteHelper extends SQLiteOpenHelper{

String SqlCreate = "CREATE TABLE password(id INTEGER, name TEXT, password TEXT)";

public passwordSQLiteHelper(Context context, String name,
        CursorFactory factory, int version) {
    super(context, name, factory, version);
    // TODO Auto-generated constructor stub
}

@Override
public void onCreate(SQLiteDatabase db) {
    // TODO Auto-generated method stub
    db.execSQL(SqlCreate);

}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    // TODO Auto-generated method stub
    db.execSQL("DROP TABLE IF EXISTS password");
    db.execSQL(SqlCreate);

}

}

そして、アクティビティの開始時にメイン クラスから呼び出しています。

passwordSQLiteHelper passUserDb = new passwordSQLiteHelper(this, "/data/data/com.project.otto/databases/password", null, 1);

端末では問題なく動作しますが、データベースが見つからないように見える電話では機能しません。adbで確認したところ、そこにありました。助けてください、ありがとう!

4

1 に答える 1

0

まず、コンストラクターでデータベースへのフル パスを指定しません。ファイル名だけで問題ありません (Android がアプリケーションのプライベート データ領域に自動的に作成するため)。

public PasswordDatabase(Context context {
    super(context, "password.db", null, 1);
}

そして、次の方法で作成します。

PasswordDatabase db = new PasswordDatabase(this);

SQLiteOpenHelperのドキュメントを見ると、どちらgetReadableDatabase()getWriteableDatabase()が呼び出されるまでデータベースは作成されないと記載されています。したがって、これらのメソッドのいずれかを呼び出して、データベースが作成されたことを確認します。

于 2012-05-20T20:16:45.050 に答える