2016-07-14 15 views
0

Ich bin neu in Android Anmerkung, ich habe in Bezug auf mehrere Verwirrungen REST-Client-Implementierung von AA api.Here ist mein Code verwende ich:Parse JSON Antwort REST android

@Rest(rootUrl = "http://something.com", converters = {MappingJackson2HttpMessageConverter.class}) 

public // if defined, the url will be added as a prefix to every request 
interface RESTClient extends RestClientHeaders { 
    @Post("/isec/api/user/login ") 
    @Accept(MediaType.APPLICATION_JSON) 
    void LoginUser(@Field String email,@Field String password,@Field String type); 
} 

und Expected JSON Antwort ist:

{ 
"status": false 
"message": "Verify your account to continue" 
"verified": "n" 
"type": "STUDENT" 
"apikey": "4o0k8sg4g8ckkswskkowcog80gog4gso0g00kogo" 
} 

Nun meine Fragen sind:

1 - In welcher Variable i die Antwort JSON bekommen?

2 - Was ist der beste Weg, um meine Antwort zu analysieren JSON, weil ich unterschiedliche Antworten auf verschiedene Parameter der gleichen URL, so kann ich keine Klasse erstellen, um mit Antwort umzugehen?

3 - Was ist der Hauptunterschied zwischen @Path, @field Annotation?

Dank im Voraus

+0

Ich schlage vor, Bibliothek namens Retrofit2 zu verwenden. Es wird dein Leben vereinfachen. Keine Notwendigkeit, die JSON-Antwort zu analysieren, und keine Notwendigkeit, über asynchrone Anfrage intensiv nachzudenken. – faruk

+0

Während der Suche habe ich viele Leute gesehen, die Retrofit2 vorschlugen, aber auch, ehrlich gesagt, habe ich keinen großen Unterschied zwischen diesen beiden Bibliotheken gefunden, aber trotzdem kannst du Tutorials zu Retrofit2 leicht verstehen und befolgen, also könnte ich das überprüfen ? –

Antwort

0
@Rest(rootUrl = "http://something.com", converters = {MappingJackson2HttpMessageConverter.class}) 

public // if defined, the url will be added as a prefix to every request 
interface RESTClient extends RestClientHeaders { 
    @Post("/isec/api/user/login ") 
    @Accept(MediaType.APPLICATION_JSON) 
    YourResponseClass LoginUser(@Field String email,@Field String password,@Field String type); 
} 

Die Antwort wird in diesem Fall mit Jackson in Ihre Klasse analysiert werden.

@Path ist für URL-Variablen, @Field ist für Formulareingaben. Die ersten werden in die URL substituiert, die zweite wird im Anfragetext als URL-codierte Parameter hinzugefügt. Bitte lies das Wiki, es hat detaillierte Beispiele.

+0

Kannst du ein beliebiges Beispiel für 'YourResponseClass' geben, wenn ich diese Klasse erstellen muss, was wird ihre Boilerplate w.r.t gegeben Antwort, wenn ja dann muss ich neue Antwortklasse für jede andere Art von Antworten erstellen? –

+0

Ja, manchmal ein paar Anfrage kann die gleiche Antwort json Struktur geben, aber manchmal ist es nicht. – faruk

+0

Es ist dann ein ziemlich schlechtes Design. Dann müssen Sie die Antwort dynamisch bearbeiten. Oder vielleicht können Sie eine polymorphe Deserialisierung versuchen, wenn es der Fall passt: http://wiki.fasterxml.com/JacksonPolymorphicDeserialization – WonderCsabo