2015-10-05 94 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他的數據和預期的一樣嗎?這個數據看起來好像是試圖下載一個文件。 –

相關問題