bluelinelabs / bluelinelabs/LoganSquare
not able to create converter for generic list
- Dominant language
- Java
- Stars
- 3.2k
- Forks
- 303
- PR merge metrics
- No merged PRs in 30d
Description
i have following class that i am using it to send request to the server. I have used list as generic so that any list can be mapped using single method.
```
@JsonObject
public class TRequest {
@JsonField(name= "request" , typeConverter = TRequestConverter.class)
private RealmList requestList;
public RealmList getRequestList() {
return requestList;
}
public void setRequestList(RealmList requestList) {
this.requestList = requestList;
}
}
```
following is the code to create request list
```
TRequest request = new TRequest();
Fitness fitness = new Fitness();
fitness.setActivity_id("123");
fitness.set_id("1");
RealmList fitnesses = new RealmList();
fitnesses.add(fitness);
request.setRequestList(fitnesses);
try {
String data = LoganSquare.serialize(request);
Log.e("LoginActivity",data);
} catch (IOException e) {
e.printStackTrace();
}
```
here is my converter code
```
@JsonObject
public class TRequest implements RealmModel {
@JsonField(name= "request" , typeConverter = TRequestConverter.class)
private RealmList requestList;
public RealmList getRequestList() {
return requestList;
}
public void setRequestList(RealmList requestList) {
this.requestList = requestList;
}
}
```
and the realm list converter is
```
public class RealmListConverter implements TypeConverter> {
public interface SingleFieldSerialization {
Object getValue(T object);
}
private Class clazz;
private TypeConverter typeConverter;
private JsonMapper mapper;
private SingleFieldSerialization serializer;
public RealmListConverter(Class clazz) {
this.clazz = clazz;
}
public RealmListConverter(Class clazz, SingleFieldSerialization serializer){
this.clazz = clazz;
this.serializer = serializer;
}
private void init() {
if (typeConverter == null && mapper == null) {
try {
typeConverter = LoganSquare.typeConverterFor(clazz);
} catch (NoSuchTypeConverterException e) {
mapper = LoganSquare.mapperFor(clazz);
}
}
}
@Override
public RealmList parse(JsonParser jsonParser) throws IOException {
init();
RealmList list = new RealmList<>();
if (jsonParser.getCurrentToken() == JsonToken.START_ARRAY) {
while (jsonParser.nextToken() != JsonToken.END_ARRAY) {
T object = typeConverter != null ? typeConverter.parse(jsonParser) : mapper.parse(jsonParser);
if (object != null) {
list.add(object);
}
}
}
return list;
}
@Override
public void serialize(RealmList list, String fieldName, boolean writeFieldNameForObject, JsonGenerator jsonGenerator) throws IOException {
if (writeFieldNameForObject) {
if (list == null) {
return;
}
jsonGenerator.writeFieldName(fieldName);
}
if (list == null) {
jsonGenerator.writeNull();
return;
}
jsonGenerator.writeStartArray();
if (serializer != null) {
JsonMapper objectMapper = LoganSquare.mapperFor(Object.class);
for (T object : list) {
if (object != null) {
objectMapper.serialize(serializer.getValue(object), jsonGenerator, true);
} else {
jsonGenerator.writeNull();
}
}
} else {
init();
for (T object : list) {
if (object != null) {
if (typeConverter != null) {
typeConverter.serialize(object, fieldName, false, jsonGenerator);
} else {
mapper.serialize(object, jsonGenerator, true);
}
} else {
jsonGenerator.writeNull();
}
}
}
jsonGenerator.writeEndArray();
}
}
```
but i am getting error
> error: incompatible types: RealmList cannot be converted to RealmList where T is a type-variable: T extends Object declared in class TRequest$$JsonObjectMapper |
> -- | --
> error: incompatible types: RealmList cannot be converted to RealmList where T is a type-variable: T extends Object declared in class TRequest$$JsonObjectMapper |
Contributor guide
No contributing guide indexed for this repository
Research direction
Start with the generic TRequest declaration and the generated TRequest$$JsonObjectMapper named in the compiler error. Compare its RealmList type handling with the TRequestConverter and RealmListConverter implementations shown in the issue. Reproduce serialization of TRequest and consider the work complete when the generic request compiles and the sample list serializes successfully.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- java
- Domain
- mobile-dev
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 25/100