Fragment使ってる画面でRoomが動いたので、今後のためにまとめメモしておきます
多少、無理矢理でやってるところがあるので、
もっといい書き方があるのかもだけど、動くし、今はこれでいい気がする
というまとめメモです
何年後か、もっと参考サイトが増えたら、また検討したいですね
■ ■ ■
今回、↓なFragument画面を作成しました
ListViewのところで、
DBデータをSelectで全表示し、チェックボックスがチェックされた時にDBデータをUpdateで更新します
リスト追加ボタンを押したら、すぐ上のTextViewの単語をDBデータにInsertで新規追加します
買い物終わりボタンを押したら、チェックボックスにチェックがあるDBデータをDeleteで削除します
■ ■ ■
■Gradleファイル追記
「build.gradle」
dependencies {
val room_version = "2.6.1"
implementation("androidx.room:room-runtime:$room_version")
annotationProcessor("androidx.room:room-compiler:$room_version")
}
val room_version = "2.6.1"
implementation("androidx.room:room-runtime:$room_version")
annotationProcessor("androidx.room:room-compiler:$room_version")
}
■Entityファイル作成
「db」フォルダ配下「Buylist.java」
@Entity(tableName = "buylist_table")
public class Buylist {
// 定義するカラム
@PrimaryKey(autoGenerate = true)
public int id;
public String buy_name;
public boolean check_flg;
// コンストラクタ
public Buylist(String buy_name, boolean check_flg) {
this.buy_name = buy_name;
this.check_flg = check_flg;
}
public int getId() {
return this.id;
}
public String getBuyName(){
return this.buy_name;
}
public boolean getCheckFlg(){
return this.check_flg;
}
}
public class Buylist {
// 定義するカラム
@PrimaryKey(autoGenerate = true)
public int id;
public String buy_name;
public boolean check_flg;
// コンストラクタ
public Buylist(String buy_name, boolean check_flg) {
this.buy_name = buy_name;
this.check_flg = check_flg;
}
public int getId() {
return this.id;
}
public String getBuyName(){
return this.buy_name;
}
public boolean getCheckFlg(){
return this.check_flg;
}
}
■Daoファイル作成
「db」フォルダ配下「BuylistDao.java」
※getAll()は、LiveDataじゃないので消してもいいはずなんだけど、消したらエラーになったので残しておいてる
@Dao
public interface BuylistDao {
//全データを昇順で取得
@Query("SELECT * FROM buylist_table ORDER BY id ASC")
List<Buylist> getAll();
@Query("SELECT * FROM buylist_table ORDER BY id ASC")
LiveData<List<Buylist>> getAlphabetizedBuylists();
//全データ削除
@Query("DELETE FROM buylist_table")
void deleteALL();
//チェック済データ削除
@Query("DELETE FROM buylist_table WHERE check_flg = 1")
void deleteChk();
//id指定でデータ削除
@Query("DELETE FROM buylist_table WHERE id = :x")
void delete(int x);
//データ追加
@Insert(onConflict = OnConflictStrategy.IGNORE)
void insert(Buylist buylist);
//データを更新
@Query("UPDATE buylist_table SET check_flg=:isChecked WHERE id=:x")
void update(int x, boolean isChecked);
}
public interface BuylistDao {
//全データを昇順で取得
@Query("SELECT * FROM buylist_table ORDER BY id ASC")
List<Buylist> getAll();
@Query("SELECT * FROM buylist_table ORDER BY id ASC")
LiveData<List<Buylist>> getAlphabetizedBuylists();
//全データ削除
@Query("DELETE FROM buylist_table")
void deleteALL();
//チェック済データ削除
@Query("DELETE FROM buylist_table WHERE check_flg = 1")
void deleteChk();
//id指定でデータ削除
@Query("DELETE FROM buylist_table WHERE id = :x")
void delete(int x);
//データ追加
@Insert(onConflict = OnConflictStrategy.IGNORE)
void insert(Buylist buylist);
//データを更新
@Query("UPDATE buylist_table SET check_flg=:isChecked WHERE id=:x")
void update(int x, boolean isChecked);
}
■Databaseファイル作成
「db」フォルダ配下「AppDatabase.java」
@Database(entities = {Buylist.class}, version = 1, exportSchema = false)
public abstract class AppDatabase extends RoomDatabase {
//DAO用メソッド
public abstract BuylistDao buyListDao();
private static volatile AppDatabase INSTANCE;
private static final int NUMBER_OF_THREADS = 4;
public static final ExecutorService databaseWriteExecutor =
Executors.newFixedThreadPool(NUMBER_OF_THREADS);
public static AppDatabase getDatabase(final Context context) {
if (INSTANCE == null) {
synchronized (AppDatabase.class) {
if (INSTANCE == null) {
INSTANCE = Room.databaseBuilder(context.getApplicationContext(),
AppDatabase.class, "app_database")
.build();
}
}
}
return INSTANCE;
}
//DBに初期データを入れるなら、ここに「RoomDatabase.Callback」を作成する
}
public abstract class AppDatabase extends RoomDatabase {
//DAO用メソッド
public abstract BuylistDao buyListDao();
private static volatile AppDatabase INSTANCE;
private static final int NUMBER_OF_THREADS = 4;
public static final ExecutorService databaseWriteExecutor =
Executors.newFixedThreadPool(NUMBER_OF_THREADS);
public static AppDatabase getDatabase(final Context context) {
if (INSTANCE == null) {
synchronized (AppDatabase.class) {
if (INSTANCE == null) {
INSTANCE = Room.databaseBuilder(context.getApplicationContext(),
AppDatabase.class, "app_database")
.build();
}
}
}
return INSTANCE;
}
//DBに初期データを入れるなら、ここに「RoomDatabase.Callback」を作成する
}
まとめ②に続く