异步任务-AsyncTack进阶-结合动态接口
2016-09-01 01:16
330 查看
使用动态接口实现异步任务下载
1, 这里我们使用到了上一篇博客中的NetWorkTask工具类, 这里不再赘述, 链接如下github
CSDN
2, 需要我们写一个注解, 用于标示接口需要传入的数据
@Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public @interface UrlString { String value(); }
3, 写一个工具类Tools, 生成接口的实例
/** * Created by Lulu on 2016/8/31. */ public class Tools { public static <T> T getInsances(Class<T> type) { Object o = Proxy.newProxyInstance(type.getClassLoader(), new Class[]{type}, new MyHandler()); return (T) o; } private static class MyHandler implements InvocationHandler { @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { method.setAccessible(true); //得到方法的注解 UrlString annotation = method.getAnnotation(UrlString.class); if (annotation != null) { String url = String.format(Locale.CHINA, annotation.value(), args); Class<?> returnType = method.getReturnType(); if (returnType.equals(NetWorkTask.class)) { //得到泛型 ParameterizedType type = (ParameterizedType) method.getGenericReturnType(); //得到实体类的类型 Type entryType = type.getActualTypeArguments()[0]; return new NetWorkTask<>(url, (Class<Object>) entryType); } } return null; } } }
4, 测试使用:
1) 新建一个获取数据的接口
public interface TopServer { @UrlString("http://www.tngou.net/api/top/show?id=%d") NetWorkTask<ShowEntry> getShow(int id); }
2)创建Activity测试
public class Main4Activity extends AppCompatActivity implements NetWorkTask.Callback<ShowEntry>{ private TextView text; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main4); TopServer server = Tools.getInsances(TopServer.class); server.getShow(13122).execute(this); text = (TextView) findViewById(R.id.main4_text); } @Override public void onSuccess(ShowEntry t) { text.setText(t.getMessage()); } @Override public void onFailed(Exception e) { } }
相关文章推荐
- 新注册
- 四大漏洞入侵博客
- 在Ubuntu系统上安装Ghost博客平台的教程
- 利用ASP.NET MVC+Bootstrap搭建个人博客之修复UEditor编辑时Bug(四)
- PHP多用户博客系统分析[想做多用户博客的朋友,需要了解]第1/3页
- 基于CakePHP实现的简单博客系统实例
- 基于jsp+servlet实现的简单博客系统实例(附源码)
- csdn 博客的css样式 v3
- 如何使用Gitblog和Markdown建自己的博客
- 利用ASP.NET MVC和Bootstrap快速搭建个人博客之文章打赏功能(六)
- 利用ASP.NET MVC+Bootstrap搭建个人博客之打造清新分页Helper(三)
- 利用JS生成博文目录及CSS定制博客
- Flask入门教程实例:搭建一个静态博客
- Python采用Django开发自己的博客系统
- 让写博客成为一种习惯
- 使用微信快捷登录Wordpress博客
- 博客之前在网易安家,现在迁移到了自己开发的blog http://blog.tongbor.com
- 开源博客兼CMS系统LBLOG在线体验站上线
- OpenAPI 之 开源软件信息预览 ProjectTips