在FOR循环的第二次迭代中,对象将返回null

时间:2018-11-20 11:34:32

标签: java android

我有一个变量,它获取数据库实例(ROOM)并执行选择返回对象CidVo。

private AppDataBase appDataBase;

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_atendimento_tab);

appDataBase = AppDataBase.getInstance(this);
}

作为异步任务的返回,我进行此查询。我需要与异步任务返回的内容相对应的CidVo,CidVo记录在数据库中,是的,在该库中有它们的对应关系。

问题出在FOR循环的第二次迭代中。

为什么会发生?

For循环:

@Override
    public void retornoAsyncTaskResultPredict(AsyncTaskResult<Retorno> asyncTaskResult) {
        if (asyncTaskResult.getExceptionResult() == null) {

            RetornoPredicaoCid predicaoCidVo = (RetornoPredicaoCid) asyncTaskResult.getResult();

            if (predicaoCidVo.getRetorno() != null) {

                List<PredicaoCidVo> predCid = predicaoCidVo.getRetorno();
                List<CidVo> predictedText = new ArrayList<>();
                List<CidVo> predictedText1 = new ArrayList<>();

                for (int i = 0;i<predCid.size();i++) {
                    //appDataBase = AppDataBase.getInstance(this);
                    CidVo cidVo = appDataBase.getCidDao().getCidVo(predCid.get(i).getTextPredicted());
                    CidVo cidVo1 = appDataBase.getCid(this, predCid.get(i).getTextPredicted());
                    predictedText1.add(cidVo1);
                    predictedText.add(cidVo);
                }


            }
    }

AppDataBase:

@Database(entities = {CidVo.class}, version = 8, exportSchema = false)
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,
                "AutoCompleteVo")
                .fallbackToDestructiveMigration()
                .allowMainThreadQueries().build();
    }

    //CID predicted
    public CidVo getCid(Context context, String idCidVo) {
        if (appDataBase == null) {
            appDataBase = AppDataBase.getInstance(context);
        }
        return appDataBase.getCidDao().getCidVo("%" + idCidVo + "%");
    }
}

DAO:

@Dao
public interface CidDao {
    //CID
    @Insert(onConflict = OnConflictStrategy.REPLACE)
    void insertAllCID(List<CidVo> cidVos);

    @Query("Select * from CidVo WHERE idCid = :idCid")
    CidVo getCidVo(String idCid);

}

循环的第一次迭代正常返回,但是从第二次迭代开始,返回null,即选择。

编辑:

编辑:

如果我选择变量(appdatabase(ALT + F8)并手动放置代码路径,则查询会将数据返回给我。

1 个答案:

答案 0 :(得分:0)

在第二次迭代中,项目开始或结束时都带有空格,从而引起了问题。用简单的.trim();

解决
predCid.get(i).getTextPredicted ().trim()
相关问题