2016-01-16 3 views
2

Je veux afficher le "titre" de l'API (http://jsonplaceholder.typicode.com/posts) à l'aide Retrofit 2 et Gson (ou GsonFormat, je ne suis pas vraiment sûr), je
ai créé les classes suivantes,

Modal.javaComment analyser la réponse Retrofit 2 à l'affichage des données?

package arpit.retrodemo; 

public class Modal { 
    private String title; 
    public String getTitle(){ 
     return title; 
    } 
} 

interface APIService,

package arpit.retrodemo; 

import java.util.List; 

import retrofit.Call; 
import retrofit.http.GET; 

public interface APIService { 
    @GET("/posts") 
    Call<List<Modal>> getDetails(); 
} 


MainActivity.java

package arpit.retrodemo; 

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.util.Log; 


import java.util.List; 

import retrofit.Call; 
import retrofit.Callback; 
import retrofit.GsonConverterFactory; 
import retrofit.Response; 
import retrofit.Retrofit; 

public class MainActivity extends AppCompatActivity { 

    private static final String ENDPOINT = "http://jsonplaceholder.typicode.com"; 
    private APIService service; 
    private static List<Modal> users; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     Retrofit retrofit = new Retrofit.Builder() 
       .addConverterFactory(GsonConverterFactory.create()) 
       .baseUrl(ENDPOINT) 
       .build(); 
     service = retrofit.create(APIService.class); 
     Call<List<Modal>> userList = service.getDetails(); 
     userList.enqueue(new Callback<List<Modal>>() { 
      @Override 
      public void onResponse(Response<List<Modal>> response) { 
       if(response.isSuccess()){ 
        Log.d("find", "response.isSuccess"); 
        // to parse the API reponse(in JSON) to display, say, "title" from the API response 
       } 
      } 

      @Override 
      public void onFailure(Throwable t) { 
       Log.d("findError", t.getMessage()); 
      } 
     }); 

    } 
} 


format JSON

[ 
    { 
    "userId": 1, 
    "id": 1, 
    "title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit", 
    "body": "quia et suscipit\nsuscipit recusandae consequuntur expedita et cum\nreprehenderit molestiae ut ut quas totam\nnostrum rerum est autem sunt rem eveniet architecto" 
    }, 
    { 
    "userId": 1, 
    "id": 2, 
    "title": "qui est esse", 
    "body": "est rerum tempore vitae\nsequi sint nihil reprehenderit dolor beatae ea dolores neque\nfugiat blanditiis voluptate porro vel nihil molestiae ut reiciendis\nqui aperiam non debitis possimus qui neque nisi nulla" 
    }, 
    { 
    "userId": 1, 
    "id": 3, 
    "title": "ea molestias quasi exercitationem repellat qui ipsa sit aut", 
    "body": "et iusto sed quo iure\nvoluptatem occaecati omnis eligendi aut ad\nvoluptatem doloribus vel accusantium quis pariatur\nmolestiae porro eius odio et labore et velit aut" 
    } 
] 


donc je reçois la réponse de l'API dans la méthode onResponse mais

Comment puis-je stocker chaque titre dans un objet de classe Modal.java et une liste « utilisateurs » contiendra tous les objets de Modal.java afin que je puisse plus tard afficher les titres en utilisant l'Iterator sur la liste "users".

+0

http://stackoverflow.com/questions/34621240/parse-a-nested-json-with-retrofit-2-0/34621436#34621436 – Amir

+0

Vous pourriez recevoir la liste de la classe modale dans votre méthode de onResponse à l'intérieur de response.body(). Pouvez-vous vérifier, mais vous obtenez dans votre response.body()? –

+0

Il y a une correction requise dans votre Json, ce n'est pas standard selon les commentaires ci-dessus. – VVB

Répondre

0

Si toutes les autres choses vont bien, vous pouvez utiliser ce morceau de code.

Type listType = new TypeToken<ArrayList<Modal>>() { // object can be String here 
     }.getType(); 
     List<Modal> list = new Gson().fromJson(response.body().string(), listType); 
1

1). Tout d'abord, veuillez ajouter la fonction setter pour le titre dans votre classe Modal.

2). Vous pouvez trouver la liste de la classe modale de response.body(). Par exemple.

@Override 
     public void onResponse(Response<List<Modal>> response) { 
      if(response.isSuccess()){ 
       List<Modal> titlesList=response.body(); 
      } 
     } 
+0

son donnant null exception de pointeur quand j'essaye d'accéder à titlesList en utilisant pour chacun comme 'pour (modal mod: titlesList) {Log.d (" trouver ", mod.getTitle());}' –

+0

avez-vous débogué votre code? obtenez-vous null dans votre response.body()? –

+0

Hey son fonctionnement bien, j'ai fait une erreur bête terrible là-bas, merci pour l'aide, et pouvez-vous s'il vous plaît également regarder cette question http://stackoverflow.com/questions/34832191/unable-to-fetch-json-object -and-array-in-retrofit-2, j'apprécierais vraiment votre aide. –