My task is to implement Kmap solver. I want to store state of the buttons in Room database but i faced with problem. The function getButton() in realization returns me null instead of my data
@ColumnInfo(name = "buttons")
. I create the row with 0001. I will devide it as a text for each button. btn0 -> 0, btn1 ->0, btn2... btn3->1 end so on. When i will click on the button i will update the row in db.
My dao file is
import androidx.room.Query;
@androidx.room.Dao
public interface Dao {
@Query("SELECT * FROM Var2")
Var2 getButtons();
@Query("Update Var2 SET buttons = :buttons")
void setButtons(String buttons);
}
My Database
@Database(entities = {Var2.class}, version = 2)
public abstract class KmapDatabase extends RoomDatabase {
private static KmapDatabase INSTANCE;
private static final String DB_NAME = "Kmap";
public abstract Dao table2Dao();
public static synchronized KmapDatabase getDatabase(Context context) {
if (INSTANCE == null) {
INSTANCE = Room.databaseBuilder(context.getApplicationContext(),
KmapDatabase.class, DB_NAME)
.fallbackToDestructiveMigration()
.allowMainThreadQueries()
.build();
}
return INSTANCE;
}
}
Realisation is
public class Realization implements Repository{
private Dao dao;
public Realization(Dao dao) {
this.dao = dao;
}
@Override
public String getButton() {
return dao.getButtons().getButtons();
}
@Override
public void setButton(String buttons, Runnable onSuccess) {
dao.setButtons(buttons);
onSuccess.run();
}
}
Repository
public interface Repository {
String getButton();
void setButton(String buttons, Runnable onSuccess);
}
Var2 (entity)
@Entity(tableName = "Var2")
public class Var2 {
@PrimaryKey(autoGenerate = true)
private int id;
@ColumnInfo(name = "buttons")
private String buttons = "0001";
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getButtons() {
return buttons;
}
public void setButtons(String buttons) {
this.buttons = buttons;
}
}
My activity
public class Map2x2 extends AppCompatActivity implements View.OnClickListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_map2x2);
KmapDatabase db = KmapDatabase.getDatabase(getApplicationContext());
Dao dao = db.table2Dao();
Realization realization = new Realization(dao);
realization.setButton("1111", () -> {
runOnUiThread(() -> {
Toast.makeText(this, "Button value saved", Toast.LENGTH_SHORT).show();
});
});
String value = realization.getButton();//THIS IS NULL
Log.v("1", value);
}
I change a lot of variations but nothing works.