我正在使用Retrofit 2调用 restful webservice 并使用LoganSqure JSON 解析器解析响应并使用Realm存储日期
由于领域不支持List
数据类型,我需要为相同类型的响应创建两个不同的模型。
例如,
@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 String 并将其转换为领域。
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()+" *********");
}