2017-07-17 15 views
0

this URLからJSONデータを解析しています。このように呼び出す:JSONデータを構文解析して再構成する

call.enqueue(new Callback<List<Gift>>() { 
    @Override 
    public void onResponse(Call<List<Gift>> call, Response<List<Gift>> response) { 
      List<Gift> places = response.body(); 
    } 
} 

しかし、私はこれを望んでいません。最初にflag0であるかどうか確認したいと思います。もしそうなら、私はlistキーの値だけを取得したいと思います。また、次のモデルを使用したいと考えています。

class Gift extends RealmObject{ 
    String code, name; 
    //getters & setters 
} 

どうすればいいですか? ご協力いただきまして誠にありがとうございます。

答えて

1

あなたは以下のようにResponseWrapperクラスを作成することができます

class GiftList{ 
String flag; 
String flag1; 
List<Gift> gifts; 

} 

call.enqueue(new Callback<List<GiftList>>() { 
    @Override 
    public void onResponse(Call<List<GiftList>> call, Response<List<GiftList>> response) { 
      List<GiftList> places = response.body(); 
     if(places.getFlag().equals("0"){ 
     List<Gift> gifts=places.getList(); 

    } 
} 
+0

私のプロジェクトに、私が欲しくない 'GiftList'のような多くのクラスを作成するよりも、多くのAPI呼び出しが含まれている場合。 –

+0

フラグフィールドがすべてのapi呼び出しで同じ場合、異なるクラスを取る必要はなく、GiftListクラスで複数のインスタンスを持つことができます。それ以外はselfです。そうでなければ、ResponseWrapperクラスを使用できます –

0

この方法のサンプルを試してみてください。

public class ResponseWrapper<T> { 

    private T data; 
    @JsonProperty("flag") 
    public int flag; 
    @JsonProperty("flag1") 
    public String flag1; 

    public T getData() { 
    return data; 
    } 
} 

そして、あなたのcallback

call.enqueue(new Callback<ResponseWrapper<List<Gift>>>() { 
    @Override 
    public void onResponse(Call<ResponseWrapper<List<Gift>>> call, Response<ResponseWrapper<List<Gift>>> response) { 
     int flag = response.body().flag; 
     List<Gift> places = response.body().getData(); 
    } 
} 
1

を変更するあなたのを保存するために別のPOJOを作成することができますGiftクラス。外側の値を格納するクラスはです。とflag1、その後、あなたはここにlist に入るしようとしているかどうかを判断するためにflagにアクセスすることができ、それがどのように見えるかです:

class GiftResponse extends RealmObject{ 
    int flag; 
    String flag1; 
    Gift[] list; 
    //getters & setters 
} 

、それがあるとして、あなたのGiftクラスを維持し、その後、あなたがデータを取得することができますlike:

call.enqueue(new Callback<GiftResponse>() { 
    @Override 
    public void onResponse(Call<GiftResponse> call, Response<GiftResponse> response) { 
      GiftResponse res = response.body(); 
      if(res.getFlag() == 0) { 
       Gift[] arrGifts = res.getList(); 
      } 
    } 
} 

ofcourseこのアプローチを使用すると、コール応答のタイプを変更します。