Мой вопрос заключается в том, как я могу сделать это todo_table
в качестве родительской таблицы и подключить к ней дочернюю таблицу, чтобы при нажатии на элемент пользователь мог создать больше подзадач . Весь код, который я использовал ниже:
ToDo.java
import androidx.room.Entity;
import androidx.room.PrimaryKey;
@Entity(tableName = "todo_table")
public class ToDo {
@PrimaryKey(autoGenerate = true)
private int id;
private String task;
private String subtask; //**Want to change this to a childTable**//
public ToDo(String task, String subtask) {
this.task = task;
this.subtask = subtask;
}
public void setId(int id) {
this.id = id;
}
public int getId() {
return id;
}
public String getTask() {
return task;
}
public String getSubtask() {
return subtask;
}
}
ToDoDao.java
import androidx.lifecycle.LiveData;
import androidx.room.Dao;
import androidx.room.Delete;
import androidx.room.Insert;
import androidx.room.Query;
import androidx.room.Update;
import java.util.List;
@Dao
public interface ToDoDao {
@Insert
void insert(ToDo toDo);
@Update
void update(ToDo toDo);
@Delete
void delete(ToDo toDo);
@Query("DELETE FROM todo_table")
void deleteAll();
@Query("SELECT * FROM todo_table")
LiveData<List<ToDo>> getAllTasks();
}
ToDoDatabase.java
import android.content.Context;
import androidx.room.Database;
import androidx.room.Room;
import androidx.room.RoomDatabase;
@Database(entities = ToDo.class, version = 1)
public abstract class ToDoDataBase extends RoomDatabase {
private static ToDoDataBase instance;
public abstract ToDoDao toDoDao();
public static synchronized ToDoDataBase getInstance(Context context){
if(instance == null){
instance = Room.databaseBuilder(context.getApplicationContext(),
ToDoDataBase.class, "todo_database")
.fallbackToDestructiveMigration()
.build();
}
return instance;
}
}
наконец ToDoRepository.java
import android.app.Application;
import android.os.AsyncTask;
import androidx.lifecycle.LiveData;
import java.util.List;
public class ToDoRepository {
private ToDoDao toDoDao;
private LiveData<List<ToDo>> toDoList;
public ToDoRepository(Application application){
ToDoDataBase dataBase = ToDoDataBase.getInstance(application);
toDoDao = dataBase.toDoDao();
toDoList = toDoDao.getAllTasks();
}
public void insert(ToDo toDo){
new InsertAsynctask(toDoDao).execute(toDo);
}
public void update(ToDo toDo){
new UpdateAsynctask(toDoDao).execute(toDo);
}
public void delete(ToDo toDo){
new DeleteAsynctask(toDoDao).execute(toDo);
}
public void deleteAll(){
new DeleteAllAsynctask(toDoDao).execute();
}
public LiveData<List<ToDo>> getToDoList() {
return toDoList;
}
private static class InsertAsynctask extends AsyncTask<ToDo, Void, Void>{
private ToDoDao toDoDao;
private InsertAsynctask(ToDoDao toDoDao){
this.toDoDao = toDoDao;
}
@Override
protected Void doInBackground(ToDo... toDos) {
toDoDao.insert(toDos[0]);
return null;
}
}
private static class UpdateAsynctask extends AsyncTask<ToDo, Void, Void>{
private ToDoDao toDoDao;
private UpdateAsynctask(ToDoDao toDoDao){
this.toDoDao = toDoDao;
}
@Override
protected Void doInBackground(ToDo... toDos) {
toDoDao.update(toDos[0]);
return null;
}
}
private static class DeleteAsynctask extends AsyncTask<ToDo, Void, Void>{
private ToDoDao toDoDao;
private DeleteAsynctask(ToDoDao toDoDao){
this.toDoDao = toDoDao;
}
@Override
protected Void doInBackground(ToDo... toDos) {
toDoDao.delete(toDos[0]);
return null;
}
}
private static class DeleteAllAsynctask extends AsyncTask<Void, Void, Void>{
private ToDoDao toDoDao;
private DeleteAllAsynctask(ToDoDao toDoDao){
this.toDoDao = toDoDao;
}
@Override
protected Void doInBackground(Void... voids) {
toDoDao.deleteAll();
return null;
}
}
}