-1

私はアンドロイドの初心者です。クイズアプリケーションを開発しました。作成したデータベースはエミュレーターで正常に動作しており、このサイトで検索すると、データ/パッケージ名/データベースの場所に保存されていることがわかります。デバイスを接続してエミュレーターとして使用すると、データベースにアクセスしません。空のデータベースが表示されます。私はサイトを検索し、評価の高い質問からデータベースファイルをデバイスのSDカードに移動することを見つけたので、次のコードを使用しました。

public class DatabaseFile extends SQLiteOpenHelper {

    public static final String DATABASE_NAME="Quiz.db";
    public static final String QUES="ques";
    public static final String OP1="op1";
    public static final String OP2="op2";
    public static final String OP3="op3";
    public static final String ANS="ans";
    public static final String NAME="name";
    public static final String CANS="cans";
    public static final String SCORE="score";

    public DatabaseFile(Context context)
    {
            super(context, DATABASE_NAME, null, 1);
            try {
                File sd = Environment.getExternalStorageDirectory();
                File data = Environment.getDataDirectory();

                if (sd.canWrite()) {
                     String currentDBPath ="/data/com.example.quizproject.StartQuiz/databases/Quiz.db";
                     String backupDBPath = "/backup/"+"Quiz.db";
                     File currentDB = new File(data, currentDBPath);
                     File backupDB = new File(sd, backupDBPath);

                     if (currentDB.exists()) {
                         FileChannel src = new   FileInputStream(currentDB).getChannel();
                         FileChannel dst = new FileOutputStream(backupDB).getChannel();
                         dst.transferFrom(src, 0, src.size());
                         src.close();
                         dst.close();
                     } else {
                         String TAG = null;
                        Log.e(TAG, "File does not exist: " + currentDBPath);
                     }
                }

             } catch (Exception e) {

                 Toast.makeText(getBaseContext(), e.toString(), Toast.LENGTH_LONG).show();


             }
    }

    public void onCreate(SQLiteDatabase db)
    {
        db.execSQL("CREATE TABLE quiztable (_id INTEGER PRIMARY KEY AUTOINCREMENT," +
        "ques TEXT, op1 TEXT, op2 TEXT, op3 TEXT, ans TEXT);");

    }

    private Context getBaseContext() {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // TODO Auto-generated method stub

    }


}

マニフェストファイルにSDカードに書き込むための権限も追加しました。上記のコードは私には機能しません。それはまだ空のデータベースを示しており、データベースのコピーもsdcardに作成されていません。追加情報として、エミュレータでデータベースにアクセスしています。

DatabaseFile dbfile;
SQLiteDatabase sqldb;
dbfile=new DatabaseFile(this);
sqldb=dbfile.getWritableDatabase();

アプリを実際のデバイスに接続した場合、コードは同じままですか????接続したデバイスはギャラクシーyです。

plzzzは私を助けます.....私はどこでも検索しましたbtは間違っているところの解決策を見つけることができませんか?データベースファイルがSDカードに転送されないのはなぜですか?

4

1 に答える 1

0

SD カードにデータベースをコピーする必要はありません。デバイスでも問題なく動作します。

デバイスからアプリケーションをアンインストールします。すべてのデータを消去します。

アセット フォルダからデータベースを削除し、再度コピーします。

動作しない場合。データベース名を変更して、再度コピーしてください。

于 2013-02-17T12:51:32.177 に答える