Andorid 对非泛型接口扩展支持泛型
来源:互联网 发布:快手外星人知乎 编辑:程序博客网 时间:2024/05/29 16:47
由于最近学习okHttp 这个开源框架,异步请求接口的CallBack是不支持泛型的,有没有什么办法扩展一下,使用的时候只需要传入一个url 一个 T 就直接得到解析后的实体对象. 把解析的过程对调用者透明, 当然已经有很好的解决方案了.有兴趣可以看看 Retrofit
当然,我想说的是如何自己扩展一下这个回调的接口
回调接口很简单,只有2个方法
public interface Callback { void onFailure(Call call, IOException e); void onResponse(Call call, Response response) throws IOException;}
实现这个接口,并通过Gson 解析数据
public abstract class MyCallBack<T> implements Callback { private Class clazz; private Gson gson; /** * 必须传入泛型对应的 T.class * @param clazz */ public MyCallBack(Class clazz) { this.clazz = clazz; gson = new Gson(); } @Override public void onFailure(Call call, IOException e) { onError(e); } @Override public void onResponse(Call call, Response response) throws IOException { String json = response.body().string(); try { T t = (T) gson.fromJson(json, clazz); onSuccess(t); } catch (Exception e) { } } public abstract void onSuccess(T t); public abstract void onError(IOException e);}
调用
private void RequestData(String url) { OkHttpClient okHttpClient = new OkHttpClient(); Request request = new Request.Builder().url(url).build(); okHttpClient.newCall(request).enqueue(new MyCallBack<User>(User.class) { @Override public void onSuccess(User user) { } @Override public void onError(IOException e) { } }); }
ps: 一定要传入T.class(T代表泛型类) 在MyCallBack 的onResponse对应数据的转换
0 0
- Andorid 对非泛型接口扩展支持泛型
- 扩展 Hibernate 对各类数据源支持
- 扩展 Hibernate 对各类数据源支持
- 扩展 Hibernate 对各类数据源支持
- ExtJs对js基本语法扩展支持
- ExtJs对js基本语法扩展支持
- ANDORID~支持的设备
- Perl 对 C 的扩展接口
- andorid 通信 HttpClient接口
- Thrift对多接口服务的支持
- Thrift对多接口服务的支持
- 扩展XDoclet对Spring List引用注入的支持
- 扩展Spring MVC用以支持Controller对Ajax的处理
- OpenGL对扩展是否支持的检测的方法
- 扩展Boost库对tbb::concurrent_hash_map的序列化支持
- 十七、对 一类物件 和 接口文件 进行扩展
- PHP扩展:Zend引擎对扩展中自定义方法的支持机制
- 动易2006版对DPO接口支持细节
- Hibernate 中一对多的 注解 问题
- MYsql 常用命令
- Phar
- linux系统编程之进程(八):守护进程详解及创建,daemon()使用
- Codeforces Round #354 (Div. 2)B.Pyramid of Glasses(思维题)
- Andorid 对非泛型接口扩展支持泛型
- The constructor BASE64Encoder() is not accessible due to restriction on required
- map::operator[]
- RESTful API
- eclipse 快捷键大全,eclipse查找类,文件,添加注释
- swift下给控件添加点击事件(双击、捏、旋转、拖动、划动、长按)
- Distributed Transaction Coordinator服务不能启动
- Bmob SDK为你打包移动后端开发工作
- 抽象类与接口