Как показать данные из SQLite с CRUD в Android Studio? - PullRequest
0 голосов
/ 14 ноября 2018

Привет, я создаю приложение и создаю базу данных, но я не знаю, как ее прочитать, чтобы показать в виде списка, например, у меня есть таблица CategoryoriaEntradas, и мне нужно показать все данные в виде списка, но я не очень хорошо понимаю, как работает все классы

Это мой класс Дао

@Dao
public interface CategoriaEntradasDao {

    @Insert
    void insert(CategoriaEntradas categoriaEntradas);

    @Update
    void update(CategoriaEntradas categoriaEntradas);

    @Delete
    void delete(CategoriaEntradas categoriaEntradas);

    @Query("DELETE FROM CategoriaEntradas")
    void deleteAll();

    @Query("SELECT * FROM CategoriaEntradas")
    LiveData<List<CategoriaEntradas>> getAll();

    @Query("SELECT * FROM CategoriaEntradas WHERE IdCategoria =:Id")
    LiveData<CategoriaEntradas> getOne(int Id);
}

Это мой класс сущностей

@Entity(tableName = "CategoriaEntradas")
public class CategoriaEntradas {

    @PrimaryKey(autoGenerate = true)
    @NonNull
    @ColumnInfo(name = "IdCategoria")
    private Integer _idCategoria;

    @NonNull
    @ColumnInfo(name = "Name")
    private String _name;

    @NonNull
    @ColumnInfo(name = "Image")
    private String _image;

    public CategoriaEntradas(@NonNull String name, @NonNull String image) { _name = name; _image = image;}

    public void set_idCategoria(Integer _idCategoria){
        this._idCategoria = _idCategoria;
    }

    @NonNull
    public Integer getIdCategoria() {
        return _idCategoria;
    }

    @NonNull
    public String getName() {
        return _name;
    }

    @NonNull
    public String getImage() {
        return _image;
    }
}

Мой репозиторий класс

public class CategoriaEntradasRepository {

    private CategoriaEntradasDao categoriaEntradasDao;
    private LiveData<List<CategoriaEntradas>> listLiveData;

    public CategoriaEntradasRepository(Application application) {
        Database db = Database.getDatabase(application);
        categoriaEntradasDao = db.categoriaEntradasDao();
        listLiveData = categoriaEntradasDao.getAll();
    }

    public LiveData<List<CategoriaEntradas>> getAll() {
        return listLiveData;
    }

    public LiveData<CategoriaEntradas> getOne(int Id) {
        return categoriaEntradasDao.getOne(Id);
    }

    public void insert (CategoriaEntradas categoriaEntradas) {
        new CategoriaEntradasRepository.insertAsyncTask(categoriaEntradasDao).execute(categoriaEntradas);
    }


    private static class insertAsyncTask extends AsyncTask<CategoriaEntradas, Void, Void> {

        private CategoriaEntradasDao entradasDao;

        insertAsyncTask(CategoriaEntradasDao dao) {
            entradasDao = dao;
        }

        @Override
        protected Void doInBackground(final CategoriaEntradas... params) {
            entradasDao.insert(params[0]);
            return null;
        }
    }

    public void update(final CategoriaEntradas categoriaEntradas){
         new CategoriaEntradasRepository.updateAsyncTask(categoriaEntradasDao).execute(categoriaEntradas);

    }

    private static class updateAsyncTask extends AsyncTask<CategoriaEntradas, Void, Void>{

        private CategoriaEntradasDao entradasDao;

        updateAsyncTask(CategoriaEntradasDao dao) {
            entradasDao = dao;
        }

        @Override
        protected Void doInBackground(final CategoriaEntradas... params){
            entradasDao.update(params[0]);
            return null;
        }
    }

    public void delete(final CategoriaEntradas categoriaEntradas) {

        new  CategoriaEntradasRepository.deleteAsyncTask(categoriaEntradasDao).execute(categoriaEntradas);
    }

    public void delete(final int Id) {

        final LiveData<CategoriaEntradas> categoriaEntradas = getOne(Id);
        if (categoriaEntradas != null) {
            new CategoriaEntradasRepository.deleteAsyncTask(categoriaEntradasDao).execute(categoriaEntradas.getValue());
        }
    }

    private static class deleteAsyncTask extends AsyncTask<CategoriaEntradas, Void, Void>{

        private CategoriaEntradasDao entradasDao;

        deleteAsyncTask(CategoriaEntradasDao dao) {
            entradasDao = dao;
        }

        @Override
        protected Void doInBackground(final CategoriaEntradas... params){
            entradasDao.delete(params[0]);
            return null;
        }
    }
}

И мой класс ViewModel

public class CategoriaEntradasViewModel  extends AndroidViewModel {

    private CategoriaEntradasRepository repository;

    private LiveData<List<CategoriaEntradas>> listLiveData;

    public CategoriaEntradasViewModel (Application application) {
        super(application);
        repository = new CategoriaEntradasRepository(application);
        listLiveData = repository.getAll();
    }

    public LiveData<List<CategoriaEntradas>> getAll() { return listLiveData; }

    public LiveData<CategoriaEntradas> getOne(int Id) { return repository.getOne(Id); }

    public void insert(CategoriaEntradas categoriaEntradas) { repository.insert(categoriaEntradas); }

    public void update(CategoriaEntradas categoriaEntradas){ repository.update(categoriaEntradas);}

    public void delete(CategoriaEntradas categoriaEntradas) {repository.delete(categoriaEntradas);}

    public void delete(int Id) {repository.delete(Id);}
}

Ответы [ 2 ]

0 голосов
/ 14 ноября 2018

Да, если у вас есть пользовательский вид списка.Это похоже на массив адаптер.

0 голосов
/ 14 ноября 2018

Попробуйте это в своей Деятельности или фрагменте, который имеет ваш просмотр списка.

CategoriaEntradasViewModel mViewModel = ViewModelProviders.of(this).get(CategoriaEntradasViewModel.class);

mViewModel.getAll().observe(this, new Observer<List<CategoriaEntradas>>() {

    @Override
    public void onChanged(List<CategoriaEntradas> categoriaEntradas) {

    adapter = new YourListViewAdapter(this, categoriaEntradas);
    listview.setAdapter(adapter);

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