I am using Retrofit 2 to call restful webservice and parsing the response using LoganSqure JSON parser and storing the date using Realm
As realm does not support List
data type i need to create two different models for same type response.
for example,
@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;
}
in the above code i cant not use RealmList<DealerList>
hence i am creating separate model for Realm
as follows.
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;
}
after that i need to serialize the response into Json String and convert it into realm.
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();
}
is there any batter way to do this ?
TypeConverter
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");
}
}
i tried above code but i am not getting any response in onResponse
function of retrofit
if (response.isSuccess()) {
Dealers dealers = response.body();
// following log is not getting printed
Log.e("Data" , dealers.getDealerList().size()+" *********");
}