Как сделать так, чтобы хранилище занимало более одного столбца? - PullRequest
0 голосов
/ 24 сентября 2019

Приведенный ниже код взят из приложения, которое я создаю на основе другого простого приложения, в котором у сущности был только один столбец.Теперь я добавил еще один столбец (materialBrand), и у меня возникли трудности с реализацией этого в классе репозитория в AsynkTask.Пожалуйста, помогите.

Это класс Entity:

@Entity(tableName = "material_table")
public class MaterialEntity {

    @PrimaryKey
    @NonNull
    @ColumnInfo(name = "material_name")
    private String mMaterialName;
    @ColumnInfo(name = "material_brand")
    private String mMaterialBrand;

    public MaterialEntity(@NonNull String materialName, String materialBrand) {
        this.mMaterialName = materialName;
        this.mMaterialBrand = materialBrand;
    }

    public String getMaterialName(){
        return this.mMaterialName;
    }

    public String getMaterialBrand(){
        return this.mMaterialBrand;
    }
}

Это Dao:

@Dao
public interface MaterialDao {

    @Insert
    void insert(MaterialEntity materialName, MaterialEntity materialBrand);

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

    @Query("SELECT * from material_table ORDER BY material_name ASC")
    LiveData<List<MaterialEntity>> getAllMaterials();
}

Это класс репозитория:

public class MaterialRepository {

    private MaterialDao mMaterialDao;
    private LiveData<List<MaterialEntity>> mAllMaterial;

    public MaterialRepository(Application application) {
        MaterialRoomDatabase db = MaterialRoomDatabase.getDatabase(application);
        mMaterialDao = db.materialDao();
        mAllMaterial = mMaterialDao.getAllMaterials();
    }

    public LiveData<List<MaterialEntity>> getAllMaterials() {
        return mAllMaterial;
    }

    public void insert (MaterialEntity materialName, MaterialEntity materialBrand) {
        new insertAsyncTask(mMaterialDao).execute(materialName, materialBrand);
    }

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

        private MaterialDao mAsyncTaskDao;

        insertAsyncTask(MaterialDao dao) {
            mAsyncTaskDao = dao;
        }

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

1 Ответ

1 голос
/ 24 сентября 2019

метод вставки ниже имеет два параметра в виде аргументов

@ Открытый интерфейс Dao MaterialDao {

@Insert
void insert(MaterialEntity materialName, MaterialEntity materialBrand);

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

@Query("SELECT * from material_table ORDER BY material_name ASC")
LiveData<List<MaterialEntity>> getAllMaterials();

}

Вы не можете отправить только один параметр.

  mAsyncTaskDao.insert(params[0]);
...