如何修复预期的字符串,但在带有改造的嵌套数组上是 BEGIN_OBJECT
Posted
技术标签:
【中文标题】如何修复预期的字符串,但在带有改造的嵌套数组上是 BEGIN_OBJECT【英文标题】:how to fix Expected a string but was BEGIN_OBJECT on a nested array with retrofit 【发布时间】:2019-08-13 20:42:25 【问题描述】:大家好,我遇到了 Expected a string 但 BEGIN_OBJECT 的问题 我现在浏览了 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"
]
]
这是我的带有构造函数、getter 和 seters 的模型
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 存储到 db
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 数组保存为字符串,以便能够在我的活动中显示它, 感谢您的帮助
【问题讨论】:
Retrofit Expected BEGIN_OBJECT but was BEGIN_ARRAY的可能重复 【参考方案1】:问题在于您的model
类especies
不是objects
的list
的字符串
在您的模型中将 private String especies;
更改为 private List<Especies> especies;
并创建一个名为 Especies
的类,如下所示
public class Especies
private String especies_id;
...
【讨论】:
以上是关于如何修复预期的字符串,但在带有改造的嵌套数组上是 BEGIN_OBJECT的主要内容,如果未能解决你的问题,请参考以下文章
如何修复预期值:“1”接收到的数组:[“COUNT (*)”:“1”] 在带有 jest 框架的 TypeORM 中出现错误
如何修复预期值:“1”收到的数组:带有jest框架的TypeORM中的[{“COUNT(*)”:“1”}]错误
如何通过改造将数组嵌套对象 Json 解析为 Kotlin?