异步任务-AsyncTack进阶-结合动态接口

2024-08-30 01:32

本文主要是介绍异步任务-AsyncTack进阶-结合动态接口,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

使用动态接口实现异步任务下载

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 {@Overridepublic 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;@Overrideprotected 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);}@Overridepublic void onSuccess(ShowEntry t) {text.setText(t.getMessage());}@Overridepublic void onFailed(Exception e) {}
}

这篇关于异步任务-AsyncTack进阶-结合动态接口的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1119419

相关文章

JavaScript中的reduce方法执行过程、使用场景及进阶用法

《JavaScript中的reduce方法执行过程、使用场景及进阶用法》:本文主要介绍JavaScript中的reduce方法执行过程、使用场景及进阶用法的相关资料,reduce是JavaScri... 目录1. 什么是reduce2. reduce语法2.1 语法2.2 参数说明3. reduce执行过程

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后

Deepseek R1模型本地化部署+API接口调用详细教程(释放AI生产力)

《DeepseekR1模型本地化部署+API接口调用详细教程(释放AI生产力)》本文介绍了本地部署DeepSeekR1模型和通过API调用将其集成到VSCode中的过程,作者详细步骤展示了如何下载和... 目录前言一、deepseek R1模型与chatGPT o1系列模型对比二、本地部署步骤1.安装oll

MyBatis-Flex BaseMapper的接口基本用法小结

《MyBatis-FlexBaseMapper的接口基本用法小结》本文主要介绍了MyBatis-FlexBaseMapper的接口基本用法小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具... 目录MyBATis-Flex简单介绍特性基础方法INSERT① insert② insertSelec

Spring排序机制之接口与注解的使用方法

《Spring排序机制之接口与注解的使用方法》本文介绍了Spring中多种排序机制,包括Ordered接口、PriorityOrdered接口、@Order注解和@Priority注解,提供了详细示例... 目录一、Spring 排序的需求场景二、Spring 中的排序机制1、Ordered 接口2、Pri

Idea实现接口的方法上无法添加@Override注解的解决方案

《Idea实现接口的方法上无法添加@Override注解的解决方案》文章介绍了在IDEA中实现接口方法时无法添加@Override注解的问题及其解决方法,主要步骤包括更改项目结构中的Languagel... 目录Idea实现接China编程口的方法上无法添加@javascriptOverride注解错误原因解决方

Java使用POI-TL和JFreeChart动态生成Word报告

《Java使用POI-TL和JFreeChart动态生成Word报告》本文介绍了使用POI-TL和JFreeChart生成包含动态数据和图表的Word报告的方法,并分享了实际开发中的踩坑经验,通过代码... 目录前言一、需求背景二、方案分析三、 POI-TL + JFreeChart 实现3.1 Maven

Java导出Excel动态表头的示例详解

《Java导出Excel动态表头的示例详解》这篇文章主要为大家详细介绍了Java导出Excel动态表头的相关知识,文中的示例代码简洁易懂,具有一定的借鉴价值,有需要的小伙伴可以了解下... 目录前言一、效果展示二、代码实现1.固定头实体类2.动态头实现3.导出动态头前言本文只记录大致思路以及做法,代码不进

异步线程traceId如何实现传递

《异步线程traceId如何实现传递》文章介绍了如何在异步请求中传递traceId,通过重写ThreadPoolTaskExecutor的方法和实现TaskDecorator接口来增强线程池,确保异步... 目录前言重写ThreadPoolTaskExecutor中方法线程池增强总结前言在日常问题排查中,

Spring Boot 整合 ShedLock 处理定时任务重复执行的问题小结

《SpringBoot整合ShedLock处理定时任务重复执行的问题小结》ShedLock是解决分布式系统中定时任务重复执行问题的Java库,通过在数据库中加锁,确保只有一个节点在指定时间执行... 目录前言什么是 ShedLock?ShedLock 的工作原理:定时任务重复执行China编程的问题使用 Shed