我第一次使用Retrofit2时遇到了这个错误:
Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $
我知道我的问题是我的pojo课程,但我无法找到解决问题的正确方法。我创建了WCF Web服务,这个服务将我的用户类的Arraylist作为json返回给我。这是我通过海报来自wcf服务器的jsom响应:
{
"GetUsersResult": [
{
"CreationDateTime": "/Date(1508174478395)/",
"Id": "8e601956-04ab-4464-9f84-c129141b8198",
"Topic": "Topics",
"UserInfo": {
"Age": "15",
"Email": "",
"LastName": "choopani",
"Name": "niloofar",
"SimId": "89984320001079005854"
},
"UserName": "niloo"
},...
根据我的回答,我创建了pojo课程:
public class User {
@SerializedName("UserInfo")
private ExpChild mChildrenList;
private String UserName, CreationDateTime,Id,Topic;
public User(String mUserName,String mCreationDateTime,String mId,
String mTopic) {
UserName = mUserName;
CreationDateTime = mCreationDateTime;
Id = mId;
Topic = mTopic;
}
这是我的客户端帖子方法的接口:
@POST("json/GetUsers")
Call<List<User>> getAllUsers();
如您所见,我想返回一个用户列表。 之后,我创建了改造服务创建者,并在我的主要活动中使用了它:
allUsers.enqueue(new Callback<List<User>>() {
@Override
public void onResponse(Call<List<User>> call, Response<List<User>> response) {
List<User> users = response.body();
}
@Override
public void onFailure(Call<List<User>> call, Throwable t) {
Toast.makeText(MainActivity.this, "faild to connect", Toast.LENGTH_SHORT).show();
Log.i("====>", "onFailure: "+ t.getMessage());
}
});
但我得到了上述错误!!我的错误在哪里?
答案 0 :(得分:1)
您的服务器返回一个JSON对象,但您的接口说它需要一个JSON数组。 (List
类型)。
您需要有第二个对象来表示服务器的完整响应:
public class ServerResponse {
@SerializedName("GetUsersResult")
private List<User> users;
... Constructor and getters here
}
然后Retrofit接口应返回与返回的JSON匹配的Call<ServerResponse>
,修复错误。