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