当前位置: 首页 > 知识库问答 >
问题:

Android改造需要BEGIN\u对象,但在第1行第1列路径处为字符串$

漆雕和雅
2023-03-14

我在我的Android应用程序中使用okhttp改造来进行网络请求。在其中一个请求中,我收到以下错误:

com.google.gson.java.lang.IllegalStateException:预期BEGIN_OBJECT但在第1行列1路径$

我在日志中看到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"
}

共有3个答案

胡桐
2023-03-14

这就是原因。您的响应没有json格式。它可能包括with string或expected}。来确定这一点。您必须与邮递员核对,并将正文中的视图类型更改为HTML。在那里,您可以看到完整的响应,并可以使用*https://jsonlint.com/ . 否则,在动态json的情况下。您可以使用JsonElement作为响应。

郎经纶
2023-03-14

如果您为成员类发布的源代码是准确的,那么您不会得到您认为正确的JSON响应。

错误消息意味着JSON解析器在它期望的复杂对象中找到了一个字符串。

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

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

扈翰
2023-03-14

如果您确定邮递员工作,并且模型与JSON参数相同,

也许您在请求头中使用了“accept-encoding:gzip”之类的代码。

改造不适用于gzip,从标题中删除它。

 类似资料: