2016-06-17 4 views
2

PHPサーバーからJSONという応答を受け取りました。アンドロイドでは、Retrofit(HTTPリクエスト用のAndroidライブラリ)でレスポンスを解析するために使用するJavaモデル(POJO)を記述する必要があります。RetrofitでGson Converterを使用して連想配列を解析するにはどうすればよいですか?

JSON構造:

{ 
    "calendar": { 
    "2016-06-10": [ 
     { 
     "time": "10h00m", 
     "title": "PROVA P2", 
     "description": "LP/RED/ED.FIS - 80 E 90", 
     "color": "#990000" 
     } 
    ], 
    "2016-06-11": [ 
     { 
     "time": "10h00m", 
     "title": "SIMULADO", 
     "description": "LOREM PSIUM DOLOR LOREM", 
     "color": "#009900" 
     }, 
     { 
     "time": "11h00m", 
     "title": "CONSELHO DE CLASSE", 
     "description": "LOREM PSIUM DOLOR", 
     "color": "#009900" 
     } 
    ] 
    }, 
    "error": false 
} 

このJSONはPHPサーバーからです。 どうすれば対応できますかレトロフィット

答えて

0

通常、JSONの表現であるPOJOを作成しますが、この場合は2016-06-10クラスと2016-06-11クラスが必要です。

これは解決策ではありません。ちょうど1つのdateTime値を作り、あなたはそれでいる間も、適切ISO 8601タイムスタンプ作り、いっそ

{ 
    "calendar": [ 
    { 
     "date": "2016-06-10", 
     "entries": [ 
     { 
      "time": "10h00m", 
      "title": "PROVA P2", 
      "description": "LP/RED/ED.FIS - 80 E 90", 
      "color": "#990000" 
     } 
     ] 
    } 
    ] 
} 

{ 
    "calendar": [ 
     { 
     "time": "2016-06-10T08:00:00.000Z", 
     "title": "PROVA P2", 
     "description": "LP/RED/ED.FIS - 80 E 90", 
     "color": "#990000" 
     } 
    ] 
} 

したがって、日付別の値を作るためにJSONレスポンスを変更JSONを提供しているサーバーを制御できない場合は、Retrofitを使用してStringを取得し、Gson変換をgson経由で行う必要があります。

0

サーバーからの奇妙な応答のためにPOJOを作成したくないときは、それをjavaのJSONのままにしておき、文字列を解析してJSONオブジェクトを作成します。 として(はい、時々私達はちょうどAPIの男がコード化されたものを制御することはできませんので...)

Cristanは、2016-06-10クラスを作成する奇妙だろう、と述べました。したがって、その特定のケースに対してJSONオブジェクトとして直接処理する方がよいでしょう。 JSONコンテナを使用して任意の属性にアクセスでき、それをデータベースに格納することもできます。

は、あなたがそのパスを選択した場合に必要なもの

private String sendAlert(String lat, String lon) throws IOException, JSONException { 

    Call<ResponseBody> call = cougarServices.postAlert(lat, lon); 
    ResponseBody response = call.execute().body(); 
    JSONObject json = (response != null ? new JSONObject(response.string()) : null); 
    return handleJsonRequest(json); 

} 
1

はダイナミックキーでJSONを解析するには、あなたがあなたのPOJOクラスでMapが必要になります。

プロジェクトに次POJOクラス追加:あなたのためのあなたの改造インターフェイスでCalendarResponseクラスを使用し

  1. CalendarResponse.java

    public class CalendarResponse { 
        @SerializedName("calendar") 
        Map<String, List<Entry>> entries; 
    
        @SerializedName("error") 
        private boolean error; 
    } 
    
  2. Entry.java

    public class Entry { 
        @SerializedName("time") 
        private String time; 
    
        @SerializedName("title") 
        private String title; 
    
        @SerializedName("description") 
        private String description; 
    
        @SerializedName("color") 
        private String color; 
    } 
    
  3. をエンドポイント、次のようにコール(同期)を実行

    public interface CalendarService { 
        @GET("<insert your own relative url>") 
        Call<CalendarResponse> listCalendar(); 
    } 
    
  4. 以下の例を参照してください。

    Call<CalendarResponse> call = calendarService.listCalendar(); 
    CalendarResponse result = call.execute().body(); 
    

を必要に応じて、ここにGSONJSONを解析する例です。

Gson gson = new GsonBuilder().create(); 
CalendarResponse b = gson.fromJson(json, CalendarResponse.class); 
関連する問題