LoganSquare parsing Android library : feedback, benchmarks, pros, cons

I have run LoganSquare Benchmark project on my Nexus 5 device with Android 6.0.1 and here is the result:

LoganSquare Benchmark screenshots

Also, after a short time spend with the lib, here are my pros and cons:

Pros

  1. is really fast in both parsing and serialization
  2. small library size
  3. handy methods for lists parsing and serialization
  4. useful converters
  5. compile-time errors instead of run-time only

Cons

  1. not much of a documentation, also not many questions & answers on StackOverflow :)
  2. not many types supported
  3. only String keys supported in Map collections

I wrote an example project to see how LoganSquare works and also a blog post, so take a look there for more information.


Well to be clear if you are releasing your app to devices with ART you will have a huge speed advantage trough parsing.

so i will explain my experience with logansquare so far.

pros :

  • Easy to use: with Gson you have to use Type for parsing json array to a object list, in loganSquare it is so easy as LoganSquare.parseList()
  • Faster : in any device (test it yourself) it is slightly faster.
  • FasterER: in ART devices its speed gap is really giant see their benchmark
  • RetroFit friendly: yeah it plays well with retrofit.

cons :

  • NO REALM DB : I could't make it run with Realm db so far(I didnt tried hard yet)

  • Custom Type Adapter :Couldn't find a type adapter or something similar so far but I am not sure.

see their benchmark here

and here is my poor benchmark results(it is not a proper benchmark but it is something): Emulator nexus 5, with DalvikVM,4.2 jellybean

Benchmarks

parsing time sheet

parsing time graph

Parsed model

import com.bluelinelabs.logansquare.annotation.JsonField;
import com.bluelinelabs.logansquare.annotation.JsonObject;
import com.google.gson.annotations.SerializedName;

/**
 * Created by Ercan on 6/26/2015.
 */
@JsonObject(serializeNullCollectionElements = true ,serializeNullObjects = true)
public class Village {

    @SerializedName("IdVillage")
    @JsonField(name ="IdVillage")
    String tbsVillageId;

    @SerializedName("TBS_VillageId")
    @JsonField(name ="TBS_VillageId")
    String townRefId;

    @SerializedName("VillageName")
    @JsonField(name ="VillageName")
    String villageName;

    @SerializedName("Status")
    @JsonField(name ="Status")
    String status;

    @SerializedName("DateInserted")
    @JsonField(name ="DateInserted")
    String dateInserted;

    @SerializedName("DateLastModified")
    @JsonField(name ="DateLastModified")
    String datelastModified;

    public String getTbsVillageId() {
        return tbsVillageId;
    }

    public void setTbsVillageId(String tbsVillageId) {
        this.tbsVillageId = tbsVillageId;
    }

    public String getTownRefId() {
        return townRefId;
    }

    public void setTownRefId(String townRefId) {
        this.townRefId = townRefId;
    }

    public String getVillageName() {
        return villageName;
    }

    public void setVillageName(String villageName) {
        this.villageName = villageName;
    }

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }

    public String getDateInserted() {
        return dateInserted;
    }

    public void setDateInserted(String dateInserted) {
        this.dateInserted = dateInserted;
    }

    public String getDatelastModified() {
        return datelastModified;
    }

    public void setDatelastModified(String datelastModified) {
        this.datelastModified = datelastModified;
    }
}

response.body() it is string json response

// MovieData it is a model Class

 MovieData movieData=LoganSquare.parse(response.body(),MovieData.class);

 Log.d("onResponse: ",movieData.getTitle());