Closed woniu0936 closed 7 years ago
这样应该可以:
@AutoValue
public abstract class ApiResult<T> {
public abstract boolean error();
public abstract T results();
public static TypeAdapter<ApiResult<T>> typeAdapter(final Gson gson) {
return new AutoValue_ApiResult.GsonTypeAdapter(gson);
}
}
P.S. 不要激动,看清楚有没有错别字,再点“submit new issue”。
谢谢指教!我的代码:
`@AutoValue
public abstract class HttpResponse
@Nullable
public abstract boolean error();
@Nullable
public abstract T results();
public static TypeAdapter<HttpResponse<T>> typeAdapter(final Gson gson) {
return new AutoValue_HttpResponse.GsonTypeAdapter(gson);
}
} 编译不通过,log如下:
Error:(21, 19) 错误: 找不到符号
符号: 类 TypeAdapter
位置: 类 HttpResponse
java.lang.IllegalArgumentException: part '
' is keyword`
是不是Gosn的序列化和反序列化操作只能针对具体的实体类,不能对T做序列化??因为这里编译的时候就要生成对应的序列化和发序列化的代码,但是T的值只有在请求api的时候传入具体的实体类才能知道T的具体类型
auto-value-gson 支持泛型,你自己试试就知道该怎么弄了。
谢谢大神指点,问题已经解决了,代码如下:
`@AutoValue
public abstract class HttpResponse
public abstract boolean error();
public abstract T results();
public static <T> TypeAdapter<HttpResponse<T>> typeAdapter(Gson gson, TypeToken<? extends HttpResponse<T>> typeToken) {
return new AutoValue_HttpResponse.GsonTypeAdapter(gson, typeToken);
}
}` 在auto-value-gson的readme里面有对Generics support的详细说明,再次感谢!
我这边的api发挥有一个简单的统一格式 {
{ "error": “”, //api是否出错 "results": “” //返回的data }
如果按照你的GithubUserSearchResult的写法,每个api都需要写一个对应的GithubUserSearchResult,但是如果使用发射封装一个HttpResponse,代码如下: `public class HttpResponse}` 则不能使用auto-value-gson进行序列化和反序列化,请问像我这种api,应该怎么结合auto-value及相关的扩展封装一个HttpResponse