异步任务-AsyncTack进阶-结合动态接口
来源:互联网 发布:淘宝联盟登录不了 编辑:程序博客网 时间:2024/06/05 06:27
使用动态接口实现异步任务下载
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) { }}
2 0
- 异步任务-AsyncTack进阶-结合动态接口
- 异步任务-AsyncTack基本使用
- Android中使用Handler和异步任务(AsyncTack)来为UI线程执行费时操作
- 异步任务AsyncTask进阶
- AsyncTack
- 解析异步消息处理机制、AsyncTack
- java异步执行任务,结合多线程线程池
- android结合异步任务,动态加载图片,Json解析数据展示在ListView,并且实现按日期分类展示,借口回调
- Android进阶2之AsyncTask实现异步处理任务
- Android进阶——多线程和异步任务小结
- 动态Quartz任务调度(Spring结合Quartz)
- android回调的理解------异步任务回调接口
- 接口的使用,以及在异步任务中的使用
- android异步任务及接口回调传输数据
- poj 1973 分配任务 进阶动态规划 <难题>
- quartz动态添加删改任务和同步任务与异步任务
- scrollView下拉刷新,异步任务动态添加view
- 异步任务
- 求矩阵左上角到右下角所经过点的和的最大距离和路径
- c++primer笔记--2.2变量
- [Java][Spring]Spring事务不起作用 问题汇总
- poj1222 EXTENDED LIGHTS OUT (高斯消元)
- c++primer笔记--2.3复合类型
- 异步任务-AsyncTack进阶-结合动态接口
- Difference between function substring() and substr()
- c++primer笔记--2.4const限定符
- Android开发中Handler的经典总结
- 文章标题
- c++primer笔记--2.5处理类型
- Android Multimedia框架总结(三)MediaPlayer中创建到setDataSource过程
- Codeforces Round #340 (Div. 2) D. Polyline 计算几何,折线
- c++primer笔记--2.6自定义数据类型