[AndroidStudio]Room再_今のところのまとめメモ
とりあえず、UI使わないのならば、DBの読み書きはできる、というあたりまでの理解ができたのでまとめてメモしておきます。この先、またリポジトリ作ったりするのでコードがぐちゃぐちゃになるだろうし…■ファイル構成 「db」というフォルダを作って、その配下に「Entity」「Dao」「Database」を入れたらわかりやすい■Gradleファイル追記「build.gradle」ファイルの「dependencies」に依存関係情報を追加dependencies { val room_version = "2.6.1" implementation("androidx.room:room-runtime:$room_version") annotationProcessor("androidx.room:room-compiler:$room_version")}■Entityファイル作成「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ファイル作成「BuylistDao.java」@Daopublic interface BuylistDao { //全データを昇順で取得 @Query("SELECT * FROM buylist_table ORDER BY id ASC") List<Buylist> getAll(); //id指定でデータ削除 @Query("DELETE FROM buylist_table WHERE id = :x") void delete(int x); //データ追加 @Insert void insert(Buylist buylist);}■Databaseファイル作成「AppDatabase.java」公式のコードだと「exportSchema」についての引数が指定されてなかったけど、これがないと動かない@Database(entities = {Buylist.class}, version = 1, exportSchema = false)public abstract class AppDatabase extends RoomDatabase { //DAO用メソッド public abstract BuylistDao buyListDao();}■データ読み書き処理作成Activityファイルから呼び出すボタン押下処理とかに書くのならば、Fragmentファイルでも呼び出せるので「ListFragment.java」に書き込んだ※UIのメインスレッドに書くと落ちる各処理ごと、にこまめにDBに接続するっぽい<データ読み込み用関数>private List<Buylist> Blist;private void loadDB() { ExecutorService executor = Executors.newSingleThreadExecutor(); executor.execute(new Runnable() { @Override public void run() { AppDatabase db = Room.databaseBuilder(requireContext().getApplicationContext(), AppDatabase.class, "app_database") .build(); //Daoのインスタンス作成 BuylistDao dao = db.buyListDao(); Blist = dao.getAll(); int list_size = Blist.size(); if(list_size > 0){ Buylist entity = Blist.get(0); //1つ目データを表示 int ids = entity.getId(); String names= entity.getBuyName(); boolean checks = entity.getCheckFlg(); binding.txtDBtest.setText(names + "_" + checks + "_" + ids); }else{ binding.txtDBtest.setText("保存データなし"); } } });}<データ読み込み用ボタン押下処理>※onCreateView内にOnClickListener書いても動く//表示ボタン押下処理binding.btnDisp.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { loadDB(); }});<データ追加用関数>private void weiteDB() { ExecutorService executor = Executors.newSingleThreadExecutor(); executor.execute(new Runnable() { @Override public void run() { try { AppDatabase db = Room.databaseBuilder(requireContext().getApplicationContext(), AppDatabase.class, "app_database") .build(); //Daoのインスタンス作成 BuylistDao dao = db.buyListDao(); //登録用データ取得 String buy_name = binding.NewWordEdit.getText().toString(); boolean buy_check_flg = false; Buylist entity = new Buylist(buy_name, buy_check_flg); dao.insert(entity); //追加項目入力エリア初期化 binding.NewWordEdit.setText(""); }catch(Exception e){ binding.txtDBdebug.setText("try catch エラー"); } } });}<データ追加用ボタン押下処理>※onCreateView内にOnClickListener書いても動く//追加ボタン押下処理binding.btnAdd.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { weiteDB(); }});<データ削除用関数>private void deleteDB() { ExecutorService executor = Executors.newSingleThreadExecutor(); executor.execute(new Runnable() { @Override public void run() { try { AppDatabase db = Room.databaseBuilder(requireContext().getApplicationContext(), AppDatabase.class, "app_database") .build(); //Daoのインスタンス作成 BuylistDao dao = db.buyListDao(); //削除データのid取得 Buylist entity = Blist.get(0);//1つ目データを削除 int list_id = entity.getId(); dao.delete(list_id); }catch(Exception e){ binding.txtDBdebug.setText("try catch エラー"); } } });}<データ削除用ボタン押下処理>※onCreateView内にOnClickListener書いても動く//削除ボタン押下処理binding.btnDelete.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { deleteDB(); }});onCreateView直下で、データ読み込み関数「loadDB();」呼び出した場合、データ取得できない!!