[AndroidStudio]Room再_まとめメモ① | 徒然雑記録

徒然雑記録

中2息子と小5娘を持つママです
週二回パートに出てるけど基本家に引きこもってますw
日常生活であった事をメモのごとく書いています

こどもの影響で見始めた鬼滅の刃にハマり落ちました…

MMDとXISMOを始めました☆

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")
}

■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;
    }
}

■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);
}

■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」を作成する
}

 

まとめ②に続く