【问题标题】:Insert a list of objects in the local base, Room在本地基础 Room 中插入对象列表
【发布时间】:2018-04-23 20:00:06
【问题描述】:

我有 CidVo 课程:

@Entity
public class CidVo implements Serializable {

    private static final long serialVersionUID = 6128323407787450445L;

    @NonNull
    @PrimaryKey
    private String idCid;

    private String dsCid;
    //private StatusType idStatus;

    public CidVo() {
        super();
    }

    public String getIdCid() {
        return idCid;
    }

    public void setIdCid(String idCid) {
        this.idCid = idCid;
    }

    public String getDsCid() {
        return dsCid;
    }

    public void setDsCid(String dsCid) {
        this.dsCid = dsCid;
    }

    /*public StatusType getIdStatus() {
        return idStatus;
    }

    public void setIdStatus(StatusType idStatus) {
        this.idStatus = idStatus;
    } */

}

DAO 类:

@Dao
public interface CIDDao {

    @Insert(onConflict = OnConflictStrategy.REPLACE)
    void insertAllCID(ArrayList<CidVo>... cidVos);
}

我通过 JSON 获得一个对象列表。我想将它保存在数据库中。 但是,我在尝试编译时收到此返回错误:

错误:Entity 类必须用@Entity 注释 E:\workspace_android_studio\app_atendimento_branch_test\app\src\main\java\br\com\sisteplan\app\atendimento\Model\CIDDao.java 错误:(19, 43) 错误: 参数类型必须是类注解 使用@Entity 或它的集合/数组。

如何解决这个问题? 以下是postExecute:

 @Override
    protected void onPostExecute(AsyncTaskResult<Retorno> respAtestadoVo) {
        super.onPostExecute(respAtestadoVo);
        if (respAtestadoVo.getExceptionResult() == null) {
            RetornoCid retornoCid = (RetornoCid) respAtestadoVo.getResult();
            ArrayList<CidVo> cidVos = (ArrayList<CidVo>) retornoCid.getRetorno();

            appDataBase.getCidDao().insertAllCID(cidVos);

            Toast.makeText(context, "Sucesso", Toast.LENGTH_SHORT).show();
        }
    }

实例:

@Database(entities = {CidVo.class}, version = 1)
public abstract class AppDataBase extends RoomDatabase {
    public abstract CIDDao getCidDao();

    private static AppDataBase appDataBase;

    public static AppDataBase getInstance(Context context){
        if(null == appDataBase){
            appDataBase = buildDataBaseInstance(context);
        }
        return appDataBase;
    }

    private static AppDataBase buildDataBaseInstance(Context context){
        return Room.databaseBuilder(context,
                AppDataBase.class,
                "app_database")
                .allowMainThreadQueries().build();
    }

    private void cleanUp(){
        appDataBase = null;
    }

}

【问题讨论】:

    标签: android


    【解决方案1】:

    原因是这里的可变参数符号void insertAllCID(ArrayList&lt;CidVo&gt;... cidVos); 您正在尝试插入一个数组列表数组。 因此,只需将其替换为

    void insertAllCID(List<CidVo> cidVos);
    

    此外,当您使用集合时,最好使用接口而不是实现。所以,你可以改变这部分

    RetornoCid retornoCid = (RetornoCid) respAtestadoVo.getResult();
    ArrayList<CidVo> cidVos = (ArrayList<CidVo>) retornoCid.getRetorno();
    

    到这里

    RetornoCid retornoCid = (RetornoCid) respAtestadoVo.getResult();
    List<CidVo> cidVos = new ArrayList(retornoCid.getRetorno());
    

    【讨论】:

      猜你喜欢
      • 2018-06-19
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多