为了账号安全,请及时绑定邮箱和手机立即绑定

预期进行BEGIN_OBJECT的改造,但进行了BEGIN_ARRAY的改造

预期进行BEGIN_OBJECT的改造,但进行了BEGIN_ARRAY的改造

catspeake 2019-11-15 21:08:35
我是JSON解析的新手,我使用Square的Retrofit库,遇到了这个问题。我正在尝试解析此JSON响应:[      {        "id": 3,        "username": "jezer",        "regid": "oiqwueoiwqueoiwqueoiwq",        "url": "http:\/\/192.168.63.175:3000\/users\/3.json"      },      {        "id": 4,        "username": "emulator",        "regid": "qwoiuewqoiueoiwqueoq",        "url": "http:\/\/192.168.63.175:3000\/users\/4.json"      },      {        "id": 7,        "username": "test",        "regid": "ksadqowueqiaksj",        "url": "http:\/\/192.168.63.175:3000\/users\/7.json"      }]这是我的模型:public class Contacts {    public List<User> contacts;}...public class User {    String username;    String regid;    @Override    public String toString(){        return(username);    }  }我的界面:public interface ContactsInterface {    @GET("/users.json")    void contacts(Callback<Contacts> cb);}我的成功方法:@Overridepublic void success(Contacts c, Response r) {    List<String> names = new ArrayList<String>();    for (int i = 0; i < c.contacts.size(); i++) {        String name = c.contacts.get(i).toString();        Log.d("Names", "" + name);        names.add(name);    }    ArrayAdapter<String> spinnerAdapter = new ArrayAdapter<String>(this,            android.R.layout.simple_spinner_item, names);    mSentTo.setAdapter(spinnerAdapter);}当我将其用于成功方法时,会引发错误预期为BEGIN_OBJECT,但在第1行column2处为BEGIN_ARRAY怎么了
查看完整描述

3 回答

?
波斯汪

TA贡献1811条经验 获得超4个赞

现在,您正在解析响应,就好像它是这样格式化的:


{

  "contacts": [

    { .. }

  ]

}

异常告诉您,您期望在根目录有一个对象,但实际数据实际上是一个数组。这意味着您需要将类型更改为数组。


最简单的方法是仅将列表用作回调中的直接类型:


@GET("/users.json")

void contacts(Callback<List<User>> cb);


查看完整回答
反对 回复 2019-11-15
?
汪汪一只猫

TA贡献1898条经验 获得超8个赞

在您的界面中替换


@GET("/users.json")

void contacts(Callback<Contacts> cb);

通过此代码


@GET("/users.json")

void contacts(Callback<List<Contacts>> cb);


查看完整回答
反对 回复 2019-11-15
  • 3 回答
  • 0 关注
  • 773 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信