SQLiteデータベースにはあまりよく慣れていませんが、私はチュートリアル/ SOの投稿を読んでしまいました。現在、私はボタンプレス上にデータを保存し、データをテーブル形式の別のアクティビティに読み込みたいと考えています。ここでボタンを押すとAsyncTaskを使用してSQLiteデータベースからデータを読み込みます
は、データベースの作成で私の試みです:私はボタンを押し上のデータを保存するのはここ
public class DBHelper extends SQLiteOpenHelper {
private final static int DB_VERSION = 10;
static final String DATABASE_NAME = "workout.db";
public static final String TABLE_NAME = "Workout_Log";
public static final String COLUMN_DISTANCE = "Distance";
public static final String COLUMN_SPEED = "Speed";
public static final String COLUMN_DURATION = "Duration";
public static final String SQL_CREATE_WORKOUT_TABLE = "CREATE TABLE " + TABLE_NAME + "(" +
BaseColumns._ID + " INTEGER PRIMARY KEY," +
COLUMN_DISTANCE + " REAL NOT NULL, " +
COLUMN_SPEED + " REAL NOT NULL, " +
COLUMN_DURATION + " REAL NOT NULL);";
public DBHelper(Context context) {
super(context, DATABASE_NAME, null,DB_VERSION);
}
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
sqLiteDatabase.execSQL(SQL_CREATE_WORKOUT_TABLE);
}
は次のとおりです。
private class WriteToDB extends AsyncTask<Void, Void, Void>{
@Override
protected Void doInBackground(Void... params) {
DBHelper dbHelper = new DBHelper(getBaseContext());
// Gets the data repository in write mode
SQLiteDatabase db = dbHelper.getWritableDatabase();
try {
// Create a new map of values, where column names are the keys
ContentValues values = new ContentValues();
values.put(DBHelper.COLUMN_DISTANCE, distance);
values.put(DBHelper.COLUMN_CADENCE, roundedLeft + roundedRight);
values.put(DBHelper.COLUMN_DURATION, leftTime + rightTime);
} finally {
db.close();
}
return null;
}
}
私onClickListenerで非同期関数を呼び出している間:
//Saves on Click?
WriteToDB writeToDB = new WriteToDB();
writeToDB.execute();
私はそれが保存されていると信じています。私が間違っていると私は正しいと思いますので、私はTextVieデータベース内の値にW(それが動作するかどうかを確認するために):
private class ReadFromDB extends AsyncTask<Void, Void, Void>{
@Override
protected Void doInBackground(Void... params) {
DBHelper dbHelper = new DBHelper(getBaseContext());
// Gets the data repository in write mode
SQLiteDatabase db = dbHelper.getReadableDatabase();
String[] projection = {
BaseColumns._ID,
DBHelper.COLUMN_DISTANCE,
DBHelper.COLUMN_CADENCE,
DBHelper.COLUMN_DURATION
};
Cursor cursor = db.query(
DBHelper.TABLE_NAME,
projection,
null,
null,
null,
null,
null
);
cursor.moveToFirst();
float itemId = cursor.getFloat(
cursor.getColumnIndexOrThrow(DBHelper.COLUMN_DISTANCE)
);
val = Float.toString(itemId);
cursor.close();
return null;
}
}
私はそれにアクセスするためのボタンを押すと、私はエラーを取得する:
Caused by: android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0
任意の提案ですか?取得
long rowID=db.insert(DBHelper.TABLE_NAME, null, values);
を、ボタンを押して上:cursor
が空である
Caused by: android.database.CursorIndexOutOfBoundsException
エラーのでdoInBackground
で
正確にWriteToDB非同期タスクでDBに書き込んでいますか?私はそれを見つけられなかったので。 – user3765370