2016-04-26 12 views
0

Ich versuche, Daten von einer POST-Anforderung zu erhalten, um Logik in meiner App zu erstellen.Daten von POST-Anforderung abrufen

Zum Beispiel; Wenn code == 200 Hauptaktivität starten, sonst Fehlermeldung erstellen.

Aber wenn ich versuche, diese Daten aus Antwortwert (Parameter onResponse-Methode) zu bekommen, habe ich NPE, und in Stack-Trace sehe ich, dass response.body() = null.

In Stack-Trace sehe ich auch, dass die Anfrage korrekt ist und Code == 200, Status = OK erhalten. Von Postman sehe ich, dass diese Anforderung wird mir Daten:

{ 
    "status": true, 
    "auth": { 
     "token": "f1071c34857e456b8ceb996de3459ab3", 
     "expires": "2017-04-26 10:01:21", 
     "user_id": "11272862" 
    }, 
    "user": { 
     "user_id": "11272862", 
     "username": "prozrostyslav", 
     "full_url": "https://vid.me/prozrostyslav", 
     "avatar": null, 
     "avatar_url": "https://d2ha22j8ys3e0o.cloudfront.net/images/default-avatars/13.png?602-2-2-4-9", 
     "cover": null, 
     "cover_url": "https://d2ha22j8ys3e0o.cloudfront.net/images/default-covers/03.jpg?602-2-2-4-9", 
     "displayname": null, 
     "follower_count": 0, 
     "likes_count": "0", 
     "video_count": 0, 
     "video_views": "0", 
     "videos_scores": 0, 
     "comments_scores": 0, 
     "bio": null 
    } 
} 

aber ich kann es nicht in meiner app bekommen :( API-Schnittstelle:

public interface VideoApi { 

    @GET("/videos/featured") 
    Call<Videos> getFeaturedVideo(); 

    @GET("/videos/new") 
    Call<Videos> getNewVideo(); 

@Headers("Content-Type:application/x-www-form-urlencoded") 
    @FormUrlEncoded 
    @POST("/auth/create") 
    Call<SignInResults>insertUser(@Header("Authorization") String authorization,@Field("username") String username, 
          @Field("password") String password 
          ); 
} 

Fragment :(Fehler in onResponse-Methode, wenn versuchen, i Wert zu erhalten)

SignInResult:

public class SignInResult { 


    @SerializedName("authorization") 
    @Expose 
    private String authorization; 
    @SerializedName("code") 
    @Expose 
    private String code; 

    public String getUsername() { 
     return username; 
    } 

    public void setUsername(String username) { 
     this.username = username; 
    } 

    @SerializedName("username") 
    @Expose 
    private String username; 

    public String getUser_id() { 
     return user_id; 
    } 

    public void setUser_id(String user_id) { 
     this.user_id = user_id; 
    } 

    @SerializedName("user_id") 
    @Expose 
    private String user_id; 
} 

SignInResults:

public class SignInResults { 
public SignInResult signInResult; 

    public List<SignInResult> getSignInResults() { 
     return signInResults; 
    } 

    List<SignInResult> signInResults; 
} 

Antwort

1

Wie ich Ihnen Retrofit verwenden sehen können. Lassen Sie uns ein paar mehr Protokoll hinzufügen, um Retrofit-Antwort, Anfrage und sehen, was da ist.

Wenn Sie durch Browser-Client abfragen, kann der Browser einige zusätzliche Mitarbeiter hinzufügen wie crftokens, einige Informationen von Cookies, aber Retrofit tut das nicht.

Mein Beispiel Nachrüstkonfiguration. Hinweis: es ist für Version 1.9 .. aber es sollte nicht viel Änderung in nie einer sein.

 mRestAdapter = new RestAdapter.Builder() 
      .setEndpoint(SERVER_URL) 
      .setLogLevel(RestAdapter.LogLevel.FULL) 
      .setConverter(gsonConverter) 
      .setLog(new RestAdapter.Log() { 
       @Override 
       public void log(String message) { 
        Log.d("Retrofit", message); 
       } 
      })