我在我的Android应用程序中使用okhttp Retrofit来发出网络请求 . 在其中一个请求中,我收到此错误:
com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:预期为BEGIN_OBJECT但在第1行第1行STRING为STRING
我在日志中看到201响应,但Retrofit会抛出此错误 . 以下是我的代码 .
signup(signupParams, new Callback<Member>() {
@Override
public void success(Member member, Response response) {
if (member != null) {
UserAccount userAccount = new UserAccount(member);
userAccount.save();
}
@Override
public void failure(RetrofitError re) {
BusProvider.post(new SignupFailedEvent(re, email));
}
});
signupParams值是 -
{"emailAddress":"test@gmail.com","password":"tester123","userSource":"APH"}
我用jsonLint测试了这个json,它是一个有效的json . 这是我的会员类,理想情况下应该是回应 .
public class Member {
public String emailAddress;
public String token;
public long id;
public String firstName;
public String lastName;
}
响应的示例应该是这样的:
{
"emailAddress": "test@gmail.com",
"id": 1437811,
"token": "sdhshdghsdhhsdbcjhbsjdhc",
"firstName": "John",
"lastName": "Smith"
}
1 回答
如果您为Member类发布的源代码是准确的,那么您没有得到您认为自己的响应JSON .
该错误消息意味着JSON解析器找到了一个String,它期望一个复杂的对象 .
由于Member类中没有任何复杂对象,因此结果可能只是无效的JSON(它不是以一个开头的花括号开头) .
尝试按照其中一条评论中的建议打开Retrofit中的详细日志记录,或者使用“Postman”等工具将相同的数据发布到API,然后查看结果实际是什么 .