繁体   English   中英

如何修复带有改型的嵌套数组上的预期字符串但为BEGIN_OBJECT

[英]how to fix Expected a string but was BEGIN_OBJECT on a nested array with retrofit

嗨,大家好,我遇到了一个预期的字符串问题,但当时BEGIN_OBJECT ii无法找到一种解决方案,该解决方案现在已经浏览2天了,需要帮助解决此问题

我将json内容存储在数据库中,但是在json上,我得到了一个嵌套数组,

这是我的json文件上的我的1个项目

[
    {
    "id": "355",
    "indicaciones": "text",
    "efectos_secundarios": "text",
    "contraindicaciones": "",
    "precauciones_advertencias": "text",
    "interacciones": "",
    "nombre_principio_activo": "Decoquinato",
    "especies": [
                {
                 "especies_id": "1"
                },
                {
                 "especies_id": "2"
                },
                {
                 "especies_id": "3"
                },
                {
                 "especies_id": "4"
                },
                {
                 "especies_id": "9"
                }
               ]
    }
]

这是我与建设者,吸气剂和安装工的模型

    private int id;
    private String indicaciones;
    private String dosis_via_administracion;
    private String efectos_secundarios;
    private String contraindicaciones;
    private String precauciones_advertencias;
    private String nombre_principio_activo;
    private String especies;

我的api

   @GET("formulario.txt")
    Call<List<FormularioModel>> getFormularios();

这是我的改造,我失去了理智

    //store formilarion on database
    public void storeFormulariosToDb(){
        Retrofit retrofitCat = new Retrofit.Builder()
                .baseUrl(ApiForm.BASE_URL)
                .addConverterFactory(GsonConverterFactory.create())
                .build();
        ApiForm apicat = retrofitCat.create(ApiForm.class);
        Call<List<FormularioModel>> callCat = apicat.getFormularios();
        callCat.enqueue(new Callback<List<FormularioModel>>() {
            @Override
            public void onResponse(Call<List<FormularioModel>> callCat, Response<List<FormularioModel>> response) {
                List<FormularioModel> obtenercate =db.getALLFormulario();
                List<FormularioModel> cat = response.body();
                if(obtenercate.size() < cat.size()){
                    for(int i = 0; i < cat.size(); i++){
                        FormularioModel cat1 = new FormularioModel(
                                cat.get(i).getId(),
                                cat.get(i).getIndicaciones(),
                                cat.get(i).getDosis_via_administracion(),
                                cat.get(i).getEfectos_secundarios(),
                                cat.get(i).getContraindicaciones(),
                                cat.get(i).getPrecauciones_advertencias(),
                                cat.get(i).getNombre_principio_activo(),
                                cat.get(i).getEspecies());  // Here is my problem


                        db.createFormularios(cat1);
                    }

                }

            }

            @Override
            public void onFailure(Call<List<FormularioModel>> callCat, Throwable t) {
                Log.e("obtener formulario", t.getMessage());            }
        });
    }

这是我要存储到数据库的DBHelper

 public long createFormularios(FormularioModel itemFORM){
        SQLiteDatabase db = this.getWritableDatabase();

        ContentValues valores = new ContentValues();
        valores.put(FORMULARIO_ID, itemFORM.getId());
        valores.put(FORMULARIO_INDICA, itemFORM.getIndicaciones());
        valores.put(FORMULARIO_VIA, itemFORM.getDosis_via_administracion());
        valores.put(FORMULARIO_EFECT, itemFORM.getEfectos_secundarios());
        valores.put(FORMULARIO_CONTRA, itemFORM.getContraindicaciones());
        valores.put(FORMULARIO_PRECA, itemFORM.getPrecauciones_advertencias());
        valores.put(FORMULARIO_NOMBRE, itemFORM.getNombre_principio_activo());
        valores.put(FORMULARIO_ESPECIE, itemFORM.getEspecies());


        long formulario_id = db.insert(TABLE_FORMULARIOS, null, valores);

        return formulario_id;

    }

并阅读我的数据库

 public List<FormularioModel> getALLFormulario(){
        List<FormularioModel> forms = new ArrayList<>();
        String selectQuery = " SELECT * FROM "
                + TABLE_FORMULARIOS
                + " ORDER BY "
                + FORMULARIO_NOMBRE + " ASC";

        SQLiteDatabase db = this.getReadableDatabase();
        Cursor c = db.rawQuery(selectQuery,null);

        if(c.moveToFirst()){
            do{
                FormularioModel t = new FormularioModel();
                t.setId(c.getInt(c.getColumnIndex(FORMULARIO_ID)));
                t.setIndicaciones(c.getString(c.getColumnIndex(FORMULARIO_INDICA)));
                t.setDosis_via_administracion(c.getString(c.getColumnIndex(FORMULARIO_VIA)));
                t.setEfectos_secundarios(c.getString(c.getColumnIndex(FORMULARIO_EFECT)));
                t.setContraindicaciones(c.getString(c.getColumnIndex(FORMULARIO_CONTRA)));
                t.setPrecauciones_advertencias(c.getString(c.getColumnIndex(FORMULARIO_PRECA)));
                t.setNombre_principio_activo(c.getString(c.getColumnIndex(FORMULARIO_NOMBRE)));
                t.setEspecies(c.getString(c.getColumnIndex(FORMULARIO_ESPECIE)));
                forms.add(t);
            } while (c.moveToNext());
        }
        return forms;
    }

我想将especies数组另存为String以便能够在我的活动中显示它,谢谢您的帮助

问题是与您的modelespecies是不是字符串的objects list

在您的模型中更改private String especies; private List<Especies> especies; 并创建一个名为Especies类,如下所示

public class Especies {
    private String especies_id;
    ...
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM