Retrofit 2を使用して安静な Web サービスを呼び出し、 LoganSqure JSON パーサーを使用して応答を解析し、Realmを使用して日付を保存しています
レルムはデータ型をサポートしていないためList
、同じ型の応答に対して 2 つの異なるモデルを作成する必要があります。
例えば、
@JsonObject
public class Dealers {
@JsonField
private String status;
@JsonField
private String responseDateTime;
@JsonField
private String userName;
@JsonField
private String count;
@JsonField
private String error;
@JsonField
private List<DealerList> dealerList;
}
上記のコードでは使用できない RealmList<DealerList>
ため、次のように別のモデルを作成してRealm
います。
public class RDealers extends RealmObject{
private String status;
private String responseDateTime;
private String userName;
private String count;
private String error;
@JsonField( typeConverter = DealerListConverter.class)
private RealmList<DealerList> dealerList;
}
その後、応答を Json 文字列にシリアル化し、それをレルムに変換する必要があります。
Dealers dealers = response.body();
try {
String jsonResponse =
LoganSquare.serialize(dealers.getdealerList());
Realm realm =getDB();
realm.beginTransaction();
realm.createAllFromJson(RDealer.class, jsonResponse);
realm.commitTransaction();
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
}
これを行うバッターの方法はありますか?
タイプコンバーター
public class DealerListConverter implements TypeConverter<RealmList<DealerList>> {
@Override
public RealmList<DealerList> parse(JsonParser jsonParser) throws IOException {
DealerList dealer = new DealerList();
RealmList<DealerList> dealerLists = new RealmList<DealerList>() ;
while(jsonParser.nextToken() != JsonToken.END_OBJECT){
String name = jsonParser.getCurrentName();
if("dealerID".equals(name)){
jsonParser.nextToken();
Log.e(name, jsonParser.getText());
dealer.setDealerID(jsonParser.getText());
}else if ("dealerName".equals(name)){
jsonParser.nextToken();
dealer.setDealerName(jsonParser.getText());
Log.e(name, jsonParser.getText() );
}else if ("dealerAddress".equals(name)){
jsonParser.nextToken();
dealer.setDealerAddress(jsonParser.getText());
Log.e(name, jsonParser.getText() );
}else if ("dealerAddress2".equals(name)){
jsonParser.nextToken();
dealer.setDealerAddress2(jsonParser.getText());
Log.e(name, jsonParser.getText() );
}else if ("latitude".equals(name)) {
jsonParser.nextToken();
dealer.setLatitude(jsonParser.getText());
Log.e(name, jsonParser.getText() );
}else if ("longitude".equals(name)){
jsonParser.nextToken();
dealer.setLongitude(jsonParser.getText());
Log.e(name, jsonParser.getText() );
}else if ("email".equals(name)){
jsonParser.nextToken();
dealer.setEmail(jsonParser.getText());
Log.e(name, jsonParser.getText() );
}else if ("city".equals(name)){
jsonParser.nextToken();
dealer.setCity(jsonParser.getText());
Log.e(name, jsonParser.getText() );
}else if ("statecode".equals(name)){
jsonParser.nextToken();
Log.e(name, jsonParser.getText());
dealer.setStatecode(jsonParser.getText());
}else if ("postcode".equals(name)){
jsonParser.nextToken();
Log.e(name, jsonParser.getText());
dealer.setPostcode(jsonParser.getText());
}
}
dealerLists.add(dealer);
return dealerLists;
}
@Override
public void serialize(RealmList<DealerList> object, String fieldName, boolean writeFieldNameForObject, JsonGenerator jsonGenerator) throws IOException {
Log.e("Converter" , "serialize");
}
}
上記のコードを試しましたがonResponse
、改造の機能で応答がありません
if (response.isSuccess()) {
Dealers dealers = response.body();
// following log is not getting printed
Log.e("Data" , dealers.getDealerList().size()+" *********");
}