【发布时间】:2015-07-11 16:34:54
【问题描述】:
我将改造用于 http 调用和 gson 用于 json 解析。我提到了这些链接:a-smart-way-to-use-retrofit 和 deserializing-inner-class-when-using-gson-and-retrofit。但我得到retrofit.converter.ConversionException: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $
这是我的 json 回复:
{
"Document": [
{
"Name": "name",
"Password": "passwrd"
}
]
}
这是我的休息 api:
@GET("/ObjectTracking/login.php/")
public void getSimpleResponse(@Query("username") String username,
@Query("pwd") String password,
Callback<SimpleResponseHandler> handlerCallback);
这是我的适配器:
Gson gson = new GsonBuilder()
.excludeFieldsWithoutExposeAnnotation()
.create();
RestAdapter restAdapter = new RestAdapter.Builder()
.setLogLevel(RestAdapter.LogLevel.FULL)
.setEndpoint(Constants.BASE_URL)
.setConverter(new GsonConverter(gson))
.build();
MainActivity.class:
simpleRestApi.getSimpleResponse(email, password, new Callback<SimpleResponseHandler>() {
@Override
public void success(SimpleResponseHandler simpleResponseHandlers, Response response) {
Log.e("RETROFIT SUCCESS", response.getBody().toString());
}
@Override
public void failure(RetrofitError error) {
Log.e("Retrofit error", error.getCause().toString());
}
});
SimpleResponseHandler.class:
public class SimpleResponseHandler {
@Expose
private List<Credentials> credentialList= new ArrayList<Credentials>();
public List<Credentials> getCredentials() {
return credentialList;
}
public void setCredentials(List<Credentials> credentialList) {
this.credentialList = credentialList;
}
public class Credentials {
@Expose
private String mName;
@Expose
private String mPassword;
public String getName() {
return mName;
}
public void setName(String name) {
this.mName = name;
}
public String getPassword() {
return mPassword;
}
public void setPassword(String pwd) {
this.mPassword = pwd;
}
}
}
【问题讨论】:
-
这是一个解析错误。尝试对您的 Credential 变量使用正确的注释,例如 @SerializedName("Name") 和 @SerializedName("Password"),因为这是正确的命名。然后在你的 SimpleResponseHandler 类中给 List
credentialList 另一个注解并给它@SerializedName("Document") 看看会发生什么。
标签: android json gson retrofit