2015-10-05 10 views
5

Ich benutze okhttp Retrofit in meiner Android App, um Netzwerkanfragen zu machen. Auf einen der Anfragen bekomme ich diesen Fehler:

com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Erwartete BEGIN_OBJECT aber war STRING in Zeile 1, Spalte 1 Pfad $

Ich sehe eine 201-Antwort in Die Protokolle aber Retrofit wirft diesen Fehler. Unten ist mein Code.

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 Wert ist -

{"emailAddress":"[email protected]","password":"tester123","userSource":"APH"} 

ich diesen json mit jsonLint getestet haben und es ist eine gültige Json. Und das ist meine Member Class, die idealerweise die Antwort sein sollte.

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

Beispiel der Antwort sollte wie folgt sein:

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

Haben Sie Beispiel JSON der Antwort? Dies scheint ein Problem bei der Deserialisierung der Antwort des Dienstes zu sein. –

+0

@AndrewBreen Ich habe ein Beispiel für die Antwort hinzugefügt. – user3773337

+2

Können Sie bestätigen, dass dies die Antwort ist, die Sie erhalten - schalten Sie die Protokollierung ein.Verbehren Sie in Ihrem Retrofit-Setup-Code und sehen Sie, wie die Anfrage und Antwort direkt aussieht. –

Antwort

1

Wenn der Quellcode, die Sie für die Mitglied Klasse geschrieben ist korrekt, dann bekommen Sie nicht die Antwort JSON, die Sie denken, sind.

Die Fehlermeldung bedeutet, dass der JSON-Parser einen String gefunden hat, wo er ein komplexes Objekt erwartet.

Da Sie keine komplexen Objekte in der Member-Klasse haben, ist das Ergebnis wahrscheinlich einfach nicht gültig JSON (es beginnt nicht mit einer öffnenden geschweiften Klammer).

Versuchen Sie entweder die ausführliche Protokollierung von Retrofit wie in einem der Kommentare vorgeschlagen zu aktivieren oder die gleichen Daten mit einem Tool wie "Postman" in der API zu posten und sehen Sie, was das Ergebnis tatsächlich ist.

+1

Ich habe die ausführliche Protokollierung aktiviert und sehe, dass meine Antwort wie folgt codiert ist: N 0 ߥ wd P , & j @ Q T \ "# 7 GDS] ! i vRR ݣ 4 SͷTp ĝ P > VP (Ag /% = /T \ T 6 O & Y $ - z 5 L m 5 6 ,: K * M] JM + T Ɛ P ᮰pŔ4 \ o 9 & * C : ~ G + ? 'v ~ < = L , 6S 5 S if F { O a3 Ǯ "Weiß jemand, warum die Antwort so ist. Für alle anderen API-Aufrufe sehe ich gültiges JSON Antwort im Logcat – user3773337

+0

Yep! das wäre das Problem. Die einzige Person, die "warum" wissen würde, ist der Besitzer der API. – GreyBeardedGeek

+0

Können Sie es mit einem Tool wie Postman validieren, wie die Antwort oben sagt, um zu sehen, ob es erhält t Daten wie erwartet? Diese Daten sehen so aus, als würden sie versuchen, eine Datei herunterzuladen. –

Verwandte Themen