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:
Also, after a short time spend with the lib, here are my pros and cons:
Pros
- is really fast in both parsing and serialization
- small library size
- handy methods for lists parsing and serialization
- useful converters
- compile-time errors instead of run-time only
Cons
- not much of a documentation, also not many questions & answers on StackOverflow :)
- not many types supported
- 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
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());