Android Retrofit预计BEGIN_OBJECT但是STRING在第1行第1列路径$

use*_*337 6 android json gson retrofit okhttp

我在我的Android应用程序中使用okhttp Retrofit来发出网络请求.在其中一个请求中,我收到此错误:

com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:预期为BEGIN_OBJECT但在第1行第1行为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));
            }
        });
Run Code Online (Sandbox Code Playgroud)

signupParams值是 -

{"emailAddress":"test@gmail.com","password":"tester123","userSource":"APH"}
Run Code Online (Sandbox Code Playgroud)

我用jsonLint测试了这个json,它是一个有效的json.这是我的会员类,理想情况下应该是回应.

public class Member {
    public String emailAddress;
    public String token;
    public long id;
    public String firstName;
    public String lastName;
}
Run Code Online (Sandbox Code Playgroud)

响应的示例应该是这样的:

{
    "emailAddress": "test@gmail.com",
    "id": 1437811,
    "token": "sdhshdghsdhhsdbcjhbsjdhc",
    "firstName": "John",
    "lastName": "Smith"
}
Run Code Online (Sandbox Code Playgroud)

Gre*_*eek 0

如果您为 Member 类发布的源代码是准确的,那么您将不会获得您认为的响应 JSON。

该错误消息意味着 JSON 解析器在它需要复杂对象的地方找到了一个字符串。

由于 Member 类中没有任何复杂对象,因此结果可能不是有效的 JSON(它不以左大括号开头)。

尝试按照评论之一的建议在 Retrofit 中打开详细日志记录,或者使用“Postman”等工具将相同的数据发布到 API,然后查看实际结果是什么。