当前位置: 首页 > 知识库问答 >
问题:

如何修正嵌套数组上需要的字符串但却是BEGIN_OBJECT

东方和煦
2023-03-14

嗨,伙计们,我有一个问题,期待一个字符串,但是BEGIN_OBJECT,我找不到一个解决方案,已经浏览了2天了,需要帮助,以解决这个问题,谢谢

我将json内容存储在一个DB上,但在我的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());            }
        });
    }

这是我要存储到db的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;
    }

共有1个答案

逄岳
2023-03-14

您的模型特殊没有将其对象列表字符串化

在模型中,将private String species;更改为private list species; 并创建一个名为species的类,如下所示

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

 类似资料:
  • 问题内容: 我已经声明了公共静态数组的名称和ID: 但是说: 我不知道怎么了 是我声明变量的方式还是写的方法? 问题答案: 您在静态String数组和传递给该方法的本地String变量之间发生冲突。 最好的解决方案是使用不同的名称。这将使代码更容易理解。 如果仍然坚持使用相同的名称,则可以通过使用类名称访问静态数组来解决名称冲突: 这同样适用于您的int数组和int变量。

  • 我试图从str2参数创建一个新的索引数组,但是得到了这个错误:“array required,but string found。”我正在学习Java,只会轻松地用JavaScript写作。有人能解释一下这个错误信息是什么意思吗?

  • 问题内容: 我想要一个带字符串并返回一个数组的Python函数,该数组中的每个项目都是字符,或者是这种类型的另一个数组。嵌套数组在输入字符串中以’(’开始,以’)’结尾。 因此,该函数将如下所示: 注意:我更喜欢纯功能的解决方案。 问题答案: 和,

  • 问题内容: 我有一个如下的文本文件。我想读取给定值作为浮动列表。之后,我将进行一些计算。我使用了拆分功能和转换来浮动。但是我不能转换第一个和最后一个,因为这两个都有方括号。([])。它给出了如下错误。 文件格式 错误 我使用的代码 任何人都可以给我一个想法,如何将这些值读入如下所示的float数组中。 然后我可以调用X [1],X [999]之类的值 问题答案: 用于将每一行解析为浮点数列表: 每

  • 我正在尝试将下面的对象转换为字符串数组 JSON对象 输入: 所需输出:

  • 错误消息:我想它说我的输入是int,即使它们被设置为String。我该怎么办? RPSL. java: 57:错误:不兼容类型:字符串不能转换为int结果[user武器][computer武器]=possibleTie; RPSL。java:57:错误:不兼容的类型:无法将字符串转换为int 结果[UserBearm][ComputerBearm]=possibleTie;