Je rencontre des difficultés pour obtenir une chaîne JSON et l'utiliser dans mon application Android. Donc, je cette classe Catégorie2, où je l'ai défini tous les champs une catégorie doit avoir:Android - Analyse JSON sans le nom du tableau à l'aide de Retrofit
public class Category2 {
@SerializedName("_id")
private String _id;
@SerializedName("name")
private String name;
@SerializedName("tasks")
private int tasks;
public Category2(String _id, String name, int tasks) {
this._id = _id;
this.name = name;
this.tasks = tasks;
}
public String get_id(){
return _id;
}
public void set_id(String _id){
this._id = _id;
}
public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
public int getTasks() {
return tasks;
}
public void setTasks(int tasks){
this.tasks = tasks;
}
}
et moi avons une classe appelée CategoryResponse qui est essentiellement une liste de category2 que je reçois de la demande de mise à niveau:
public class CategoryResponse {
private List<Category2> results;
public List<Category2> getResults() {
return results;
}
public void setResults(List<Category2> results) {
this.results = results;
}
}
en général, je traite avec des chaînes JSON qui ont un nom pour les résultats même quand il est une liste d'éléments tels que:
{"genres":[{"id":28,"name":"Action"},{"id":12,"name":"Adventure"}]}
lorsque la chaîne JSON est comme ci-dessus Je viens d'ajouter un sérialisé pour les résultats de la liste ci-dessus la déclaration de la liste:
@SerializedName("genres")
Et il fonctionne très bien quand je déclare ma méthode GET:
@GET("/v3/projects/{projectId}/categories/")
Call<CategoryResponse> getProjectCategories(@Query("projectId") String projectId, @Header("Token") String token);
Et je l'appelle dans mon activité:
categoryService =
CategoryClient.getClient().create(CategoryService.class);
Call<CategoryResponse> call = categoryService.getProjectCategories(projectId,token);
call.enqueue(new Callback<CategoryResponse>() {
@Override
public void onResponse(Call<CategoryResponse> call, Response<CategoryResponse> response) {
//int statusCode = response.code();
listCategories = new ArrayList<>();
listCategories = response.body().getResults();
System.out.println("Size: " + response.body().getResults().size());
}
@Override
public void onFailure(Call<CategoryResponse> call, Throwable t) {
// Log error here since request failed
Log.e(TAG, t.toString());
}
});
Mais ce que j'ai maintenant pour les catégories est quelque chose comme ceci:
[
{
"_id": "59a6b18b2ba5c14bb76f28c8",
"createdAt": "2017-08-30T12:37:31.885Z",
"updatedAt": "2017-08-30T12:37:31.885Z",
"projectId": "598cbc74a1d0e57722ca98d1",
"companyId": "5602eb7ce49c9cd70409f206",
"name": "Arquitetura",
"__v": 0,
"tasks": 0
},
{
"_id": "59a6b1be2ba5c14bb76f28c9",
"createdAt": "2017-08-30T12:38:22.407Z",
"updatedAt": "2017-08-30T12:38:22.407Z",
"projectId": "598cbc74a1d0e57722ca98d1",
"companyId": "5602eb7ce49c9cd70409f206",
"name": "Manutenção",
"__v": 0,
"tasks": 0
}
]
Donc, je ne peux pas sérialiser le nom de la liste des résultats et je reçois null quand j'appelle "response.body.GetResults()".
Essayez de supprimer 'Category2' Copy Constructor. Si un constructeur de copie est disponible, aucun constructeur par défaut n'est appelé lorsque vous créez de nouveaux objets de classe 'Category2'. Essayez ceci et dites-moi si cela fonctionne –