2016-04-23 6 views
0

私はフォーラムでトピックのリストを取得するために私が照会するサーバーを持っています。ここでは、すべてのJSONObjectJSON配列をサーバーAPIリクエストからretrofit2のオブジェクトに変換する

[ 
    { 
    "id": 728, 
    "date": "2016-01-01T13:01:51", 
    "date_gmt": "2016-01-01T07:31:51", 
    .... 
    }, 
    { 
    "id": 556, 
    "date": "2015-06-07T21:16:59", 
    "date_gmt": "2015-06-07T15:46:59", 
    .... 
    }, 
    { 
    "id": 554, 
    "date": "2015-06-07T21:16:28", 
    "date_gmt": "2015-06-07T15:46:28", 
    .... 
    } 
] 

がフォーラムトピックに関するデータである - curl経由で返されたデータは、このようなものです。

{ 
    "id": 554, 
    "date": "2015-06-07T21:16:28", 
    "date_gmt": "2015-06-07T15:46:28", 
    .... 
} 

私は、AndroidアプリでListViewで、このデータを表示したいです。

しかし、ListViewのオブジェクトを作成するのにretrofit2gsonを使用しているので、私がいつも得る応答はNot Foundです。

Retrofit retrofit = new Retrofit.Builder() 
     .baseUrl(ENDPOINT) 
     .addConverterFactory(buildGsonConverter()) 
     .build(); 

serverAPI = retrofit.create(ServerAPI.class); 

private Converter.Factory buildGsonConverter() { 
    return GsonConverterFactory.create(); 
} 

Call<List<Forum>> call = App.serverAPI.getListOfForums(); 
call.enqueue(new Callback<List<Forum>>() { 
    @Override 
    public void onResponse(Call<List<Forum>> call, Response<List<Forum>> response) { 
     Log.i(TAG, "onResponse: " + (null != response.message() ? response.message() : "")); 
     Log.i(TAG, "response body - " + (null != response.body() ? response.body() : "")); 
     if (response.isSuccessful()) { 
      adapter.setForums(response.body()); 
      adapter.notifyDataSetChanged(); 
     } 
    } 

    @Override 
    public void onFailure(Call<List<Forum>> call, Throwable t) { 
     Log.i(TAG, "onFailure: " + t.toString()); 
     Log.i(TAG, "onFailure: " + t.getMessage()); 
    } 
}); 

ServerAPI.class - 

@GET("/forum/") 
Call<List<Forum>> getListOfForums(); 

今のところ返されたJSONを逆シリアル化するときは何もしません。 JsonDeserializerを使用しても、どうすればList<Forum>を簡単に取り込むことができますか?

答えて

1

JSON自体を変更する必要はありません。

public interface ServerAPI { 
    @GET("/forum") 
    Call<Forum> getListOfForums(); 
} 

FormResponse.java

public class ForumResponse { 
    @SerializedName("id") 
    private int id; 

    @SerializedName("date") 
    private String date; 

    @SerializedName("date_gmt") 
    private String date_gmt; 
} 

onResponse MainActivity.javaで

@Override 
public void onResponse(Call<Forum> call, Response<Forum> response) { 
    String jsonString = response.body().toString(); 
    Log.i("onResponse", jsonString); 
    Type listType = new TypeToken<List<ForumResponse>>() {}.getType(); 
    List<ForumResponse> yourList = new Gson().fromJson(jsonString, listType); 
    Log.i("onResponse", yourList.toString()); 
} 
関連する問題