2015-10-05 93 views
5

我在我的Android应用程序中使用okhttp Retrofit来发出网络请求。在请求一个我得到这个错误:

com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:预期BEGIN_OBJECT但STRING在第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":"[email protected]","password":"tester123","userSource":"APH"} 

我已经测试此JSON与jsonLint,这是一个有效的JSON。这是我的会员阶层,应该是理想的回应。响应

public class Member { 
    public String emailAddress; 
    public String token; 
    public long id; 
    public String firstName; 
    public String lastName; 
} 

例子应该是这样的:

{ 
    "emailAddress": "[email protected]", 
    "id": 1437811, 
    "token": "sdhshdghsdhhsdbcjhbsjdhc", 
    "firstName": "John", 
    "lastName": "Smith" 
} 
+1

你有答案的例子JSON?这看起来像是对服务响应进行反序列化的问题。 –

+0

@AndrewBreen我添加了一个响应的例子。 – user3773337

+2

您能否确认这是您收到的响应 - 打开logging.Verbose在您的Retrofit设置代码中,并直接查看请求和响应的样子。 –

回答

1

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

错误消息意味着JSON解析器在预期复杂对象的位置找到了一个String。

因为你没有在会员类中的任何复杂的对象,其结果很可能只是不是有效的JSON(它不与左大括号开始)。

尝试无论是作为在评论一个建议,或使用如“邮差”的工具相同的数据发布到API,看看有什么结果实际上是在改造详细日志记录打开。

+1

我打开了详细的日志记录,发现我的响应是这样编码的: N 0 wd P , &j @QT \“#7GDS]!ivRRݣ4SͷTpĝP> VP银(Ag /% ] K * L:z5Lm56, - =/T \ T6O&Y $ JM +TƐP᮰pŔ4\ O9&* C:?〜G +'v〜<= L Does, 6S 5 S if F { O a3 Ǯ “有谁知道为什么是这样的响应。对于所有其他API调用,我看到有效的JSON反应在logcat中。 – user3773337

+0

没错!这会是问题。 谁知道“为什么”是API的所有者。 – GreyBeardedGeek

+0

你可以验证使用像邮差的工具它上面的回答说,看的只有一人它收到t他的数据和预期的一样吗?这个数据看起来好像是试图下载一个文件。 –

相关问题