Создайте приложение, которое реализует списки списков в RecyclerView. - PullRequest
0 голосов
/ 02 октября 2019

Мой вопрос заключается в том, как я могу сделать это 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;
        }
    }



}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...