bluelinelabs / bluelinelabs/LoganSquare

not able to create converter for generic list

Open
#225 1 comment 0 reactions 0 assignees View on GitHub
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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.