2017-06-26 6 views
0

ベンダーからのjson応答に従っています。アンドロイドに改装してJavaでPOJOを作成できません

{ 
    "status": "success", 
    "data": { 
    "values": [ 
     [ 
     "2015-12-28T09:15:00+0530", 
     1386.4, 
     1388, 
     1381.05, 
     1385.1, 
     788 
     ], 
     [ 
     "2015-12-28T09:15:00+0530", 
     1386.4, 
     1388, 
     1381.05, 
     1385.1, 
     788 
     ] 
    ] 
    } 
} 

これをPOJOに変換したいと思います。

私はretrofit 2.0、rx javaを使用しています。

私は

public class HistoricalDataContainer implements Parcelable{ 
public String status; 
public CandleList data; 

protected HistoricalDataContainer(Parcel in) { 
    status = in.readString(); 
    data = in.readParcelable(CandleList.class.getClassLoader()); 
} 

@Override 
public void writeToParcel(Parcel dest, int flags) { 
    dest.writeString(status); 
    dest.writeParcelable(data, flags); 
} 

@Override 
public int describeContents() { 
    return 0; 
} 

public static final Creator<HistoricalDataContainer> CREATOR = new Creator<HistoricalDataContainer>() { 
    @Override 
    public HistoricalDataContainer createFromParcel(Parcel in) { 
     return new HistoricalDataContainer(in); 
    } 

    @Override 
    public HistoricalDataContainer[] newArray(int size) { 
     return new HistoricalDataContainer[size]; 
    } 
}; 
} 

そして

public class CandleList implements Parcelable{ 
public ArrayList<ArrayList<String>> values = new ArrayList<>();// doesn't work 
public ArrayList<String[]> values=new ArrayList<String[]>();// doesn't work 
public ArrayList<String>[] values; // doesn't work 

protected CandleList(Parcel in) { 
} 

@Override 
public void writeToParcel(Parcel dest, int flags) { 
} 

@Override 
public int describeContents() { 
    return 0; 
} 

public static final Creator<CandleList> CREATOR = new Creator<CandleList>() { 
    @Override 
    public CandleList createFromParcel(Parcel in) { 
     return new CandleList(in); 
    } 

    @Override 
    public CandleList[] newArray(int size) { 
     return new CandleList[size]; 
    } 
}; 
} 

しかし、上記のコード "値" に常にnullである

次試してみました。 私は何が欠けています。

+0

Retrofit CallBacksを実装しましたか? – AndroidStorm

+0

ああ、他のすべての人はうまく動作しますが、これ以外のすべての要求、応答、処理は例外です。 – EagleEye

+0

あなたは返答で何を正確に受け取ったのですか?あなたはここにメッセージを置くことができますか?いくつかのエラーがありますか?レスポンスコードが正しい場合には、いつでもCallBackをデバッグすることができます。それを分かち合えますか? – AndroidStorm

答えて

0

JSONマッピングのためにhttp://www.jsonschema2pojo.org/を試すことができます。既存のJSONレスポンスからモデルを作成するための優れたツールです。既存のクラスにParcelableを迅速に実装するには、http://www.parcelabler.com/

+0

それも試してみました:)。しかし、提案をありがとう。 – EagleEye

1

Gsonの注釈スタイルがありません。たとえば :あなたのPOJO上のすべてのオブジェクトに合わせてレトロフィット助け

public class LiveStreamResponse extends BaseResponse{ 
    @SerializedName("live_stream") 
    @Expose 
    private LiveStream liveStream; 
    @SerializedName("meta") 
    @Expose 
    private Meta meta; 

    public LiveStream getLiveStream() { 
    return liveStream; 
    } 

    public void setLiveStream(LiveStream liveStream) { 
    this.liveStream = liveStream; 
    } 

    public Meta getMeta() { 
    return meta; 
    } 

    public void setMeta(Meta meta) { 
    this.meta = meta; 
    } 
} 

は、あなたがあなたの「ステータス」と一致する必要があるオブジェクトを定義する必要があります。「成功」、「データ」、「値」 Jsonファイルから。 このチュートリアルの詳細については、こちらをご覧ください。 Consuming APIs with Retrofit

また、この例はusing xml and Jsonです。

+0

必ずしも変数名とjsonキーが同じであれば、これは機能します。しかし、例えば、私たちはjsonキーとしてemail_idを受け取り、変数としてemailIDを使用します。この場合、@SerializedNameを使用する必要があります。しかし、努力をいただきありがとうございます。 – EagleEye

1

まず、JSON構造内にあるオブジェクトを識別する必要があります。この場合は2つあります.1。あなたが受け取っているjsonと、data。 オプションはすべてのオブジェクトのクラスを作成することです。

第1クラスには主な属性(json自体)が含まれ、主な属性はstatusdataです。あなたはこのような場合には、彼の属性を処理するために自分のクラスを作成する必要があるので、

public class HistoricalDataContainer implements Parcelable { 
    private string status; 
    private Data data; 
    setters - getters 
    ... 
} 

データは、オブジェクトである値内の特定の配列を取得するために、文字列配列

public class Data implements Parcelable { 
      private List<String> values; 
      setters - getters 
      ... 
     } 

を持つ配列であります

List<String> myStringArray = historicalDataContainer.getData().values().get(index); 

:あなたのような何かをしようとしています

なぜあなたはParcelableを使用していますか?

... この回答が必要なのですか?

関連する問題