一尘不染

改造预期的BEGIN_对象,但为BEGIN_数组

java

我是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);

}

我的成功方法:

@Override
public 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

怎么了


阅读 299

收藏
2020-03-19

共1个答案

一尘不染

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

{
  "contacts": [
    { .. }
  ]
}

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

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

@GET("/users.json")
void contacts(Callback<List<User>> cb);
2020-03-19