converting logansqare json class to realm

359 Views Asked by At

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()+" *********");

      }
0

There are 0 best solutions below