java之写接口回调编程经验改进

1、问题

在一个类里面数据的变化需要在另外一个类里面动态得到,比如在我的异步任务里面下载的数据,需要在UI界面的ProgressDialog里面动态显示,我们需要在异步任务里面写个接口,然后接口里面有一些函数,至于在ProgressDialog显示的时候,我们只需要重写接口,然后传递到异步任务里面去就行,一般在传递到异步任务里面去我们可以通过构造方法传递或者,set一个接口进去。

 

 

 

 

2、一般实现办法

这里通过构造方法传递接口

 

public class DownloadApkTask extends AsyncTask<Void, Integer, File> { public interface CallBack {//开始下载弹出进度对话框public void startDownload();//更新进度值public void updateProgress(int progress);//下载完成,消失对话框,并且安装apk,需要apk的路径public void finishDownload(String apkPath);//下载失败public void downloadFail();}public CallBack mCallback;public DownloadApkTask (CallBack callback) {this.mCallback = callback;}@Overrideprotected File doInBackground(Void... params) { //***if (mCallback != null) {mCallback.startDownload();}//***}
}

 

 

 

 

 

 

3、改进

public class DownloadApkTask extends AsyncTask<Void, Integer, File> { public interface CallBack {//开始下载弹出进度对话框public void startDownload();//更新进度值public void updateProgress(int progress);//下载完成,消失对话框,并且安装apk,需要apk的路径public void finishDownload(String apkPath);//下载失败public void downloadFail();CallBack DEFAULT = new CallBack(){@Overridepublic void startDownload() {Log.debug(TAG, "DownloadApkTask startDownload");}@Overridepublic void updateProgress(int progress) {}@Overridepublic void finishDownload(String apkPath) {}@Overridepublic void downloadFail() {}};}public CallBack mCallback = CallBack.DEFAULT;public DownloadApkTask (CallBack callback) {if (callback == null)this.mCallback = CallBack.DEFAULT;elsethis.mCallback = callback;}@Overrideprotected File doInBackground(Void... params) { mCallback.startDownload();}
}

我们在接口里面写了一匿名对象DEFAULT,然后mCallback初始化的时候,赋值为DEFAULT,然后在构造方法里面传递了这个接口,这里就爽我们传递空接口进去也没事,而且后面的调用接口的方法startDownload()方法的时候不需要判断if(mCallback != null),因为我们在构造方法里面已经做了处理,如果传递为空接口到构造方法里面去,我们调用startDownload()方法的时候,就会在interface CallBack里面的DEFAULT对象里面的startDownload()方法,然后打印日志,如果传递不是空接口到购置函数里面,调用startDownload()方法的时候,会调用外部接口回调里面的重写的startDownload()方法。

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/289774.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mac Ubuntu ----端口被占用

Mac下使用lsof&#xff08;list open files&#xff09;来查看端口占用情况&#xff0c;lsof 是一个列出当前系统打开文件的工具。 使用 lsof 会列举所有占用的端口列表&#xff1a; 1$ lsof使用less可以用于分页展示&#xff0c;如&#xff1a; 1$ lsof | less也可以使用 -i 查…

iOS 9音频应用播放音频之音量设置与声道设置

iOS 9音频应用播放音频之音量设置与声道设置 iOS 9音频应用音量设置 音量又称响度、音强&#xff0c;是指人耳对所听到的声音大小强弱的主观感受&#xff0c;其客观评价尺度是声音的振幅大小。在iOS 9音频应用的应用中&#xff0c;经常会出现播放的音乐音量过大或者过小。此时i…

nginx配置文件中的location中文详解

location 语法:location [|~|~*|^~] /uri/ { … }默认:否 上下文:server 这个指令随URL不同而接受不同的结构。你可以配置使用常规字符串和正则表达式。如果使用正则表达式&#xff0c;你必须使用 ~* 前缀选择不区分大小写的匹配或者 ~ 选择区分大小写的匹配。 确定 哪个locati…

php fpm工作原理,什么是phpfpm的工作原理?

什么是phpfpm的工作原理&#xff1f;发布时间&#xff1a;2020-07-13 15:12:53来源&#xff1a;亿速云阅读&#xff1a;181作者&#xff1a;Leah什么是phpfpm的工作原理&#xff1f;针对这个问题&#xff0c;这篇文章详细介绍了相对应的分析和解答&#xff0c;希望可以帮助更多…

C#对象映射器之Mapster

简介Mapster是一个快&#xff0c;小巧&#xff0c;功能强大的对象映射.Net框架例子我有两个Model类且他们的属性一致&#xff0c;我们将 SourceObjectTest赋值给DestObjectTest该怎么做&#xff1f;SourceObjectTest sourceObject new SourceObjectTest(); sourceObject.Name …

如何关闭Struts2的webconsole.html

出于安全目的&#xff0c;在禁用了devMode之后&#xff0c;仍然不希望其他人员看到webconsole.html页面&#xff0c;则可以直接删除webconsole.html 的源文件&#xff0c; 它的位置存在于&#xff1a; 我们手工删除 struts2-core-*.jar\org\apache\struts2\interceptor\debuggi…

UIView 的基础

UIView•什么是控件&#xff1f;-屏幕上的所有UI元素都叫做控件&#xff0c;也有人叫做视图、组件-按钮&#xff08;UIButton&#xff09;、文本&#xff08;UILabel&#xff09;都是控件•控件的共同属性有哪些&#xff1f;-尺寸-位置-背景色-......-•苹果将控件的共同属性都…

记录平时编程或者阅读英文文档的时候不认识的英文单词

一、目的 英语虽然过了4级&#xff0c;但是还是很多英文单词不认识&#xff0c;为了以后能更好的阅读英文文档和函数的英文注释&#xff0c;记录自己不认识的英文单词&#xff0c;方便以后复习&#xff0c;这里后面会持续更新&#xff0c;因为放在网上这个平台不会弄丢。 二、…

php本地的调试安装,教你本地安装、运行、调试PHP程序

安装工具对学习PHP的新手来说&#xff0c;WINDOWS下环境配置是一件很困难的事&#xff1b;至少对于我来说本地调试PHP程序比登天还要困难&#xff0c;繁荣拖沓的各种程序。以前我博客程序用的是PJBLOG&#xff0c;本地的IIS就完全可以搞定&#xff0c;但是自从换了WordPress之后…

如何从一个 C# 的 dump 中挖到机器相关的信息?

前段时间有位朋友问我&#xff0c;如何从 dump 中提取出哪些和机器相关的信息&#xff1f;比如&#xff1a;机器内存大小&#xff0c;cpu核数&#xff0c;机器名&#xff0c;机器的环境变量 等等。那如何提取到里面的信息呢&#xff1f;当然我也没说全部可以提取的到。。。这里…

9.3磁盘及文件系统管理详解

练习&#xff1a;4 调整其预留百分比为3%#tune2fs -m 3 -L DATA /dev/sda75 以重新挂载此文件系统为不更新访问时间戳&#xff0c;并验证其效果#stat /backup/inittab# cat /backup/inittab# stat# mount -o remount,noatime /backup# cat # stat6 对此文件系统强行做一次检测e…

LeetCode() Word Search II

超时&#xff0c;用了tire也不行&#xff0c;需要再改。 class Solution {class TrieNode { public:// Initialize your data structure here.TrieNode() {for(int i0;i<26;i)next[i]NULL;isString false;}TrieNode *next[26];bool isString; };class Trie { public:Trie()…

java之通过FileChannel实现文件复制

1、FileChanel介绍 Java NIO FileChannel是连接文件的通道&#xff0c;从文件中读取数据和将数据写入文件。Java NIO FileChannel类是NIO用于替代使用标准Java IO API读取文件的方法。 FileInputStream的getChannel方法获取的文件通道是只读的&#xff0c;当然通过FileOutput…

Python版的Hello World

print “Hello World” 或者print("Hello World")

如何获取当前C#程序所有线程的调用栈信息 ?

咨询区 Daniel Sperry请问如何获取 .NET 程序当前所有线程的调用栈信息&#xff1f;我知道在 java 中只需调用 java.lang.Thread.getAllStackTraces() 方法即可。回答区 Will Calderwood在 .NET 中并不容易实现&#xff0c;但可以使用诊断库 ClrMD &#xff0c;可以在 nuget 上…

JS

为什么80%的码农都做不了架构师&#xff1f;>>> function getQueryString(name) {var reg new RegExp("(^|&)" name "([^&]*)(&|$)"),r window.location.search.substr(1).match(reg);if(r ! null) {return unescape(r[2]); }r…

织梦php远程连接数据库,用PHP连接Oracle for NT 远程数据库

用PHP连接Oracle for NT 远程数据库发布时间&#xff1a;2016-06-17 来源&#xff1a; 点击:次我以前用php连接远程oracle8.0.5 for NT 企业版,用ODBC,oracle接口均不行。急煞我也&#xff01;寻寻觅觅&#xff0c;终于找到了连接的正确方法&#xff0c;我这里用OCI接口&#x…

ssh公钥免密码登录

2019独角兽企业重金招聘Python工程师标准>>> ssh 无密码登录要使用公钥与私钥。linux下可以用用ssh-keygen生成公钥/私钥对&#xff0c;下面我以CentOS为例。 有机器A(192.168.1.155)&#xff0c;B(192.168.1.181)。现想A通过ssh免密码登录到B。 首先以root账户登陆…

java之Synchronized(锁住对象和锁住代码)

1、问题 Synchronized我们一般都知道是锁&#xff0c;但是我们怎么区分是锁对象还是锁代码呢&#xff1f; 2、测试Demo package leetcode.chenyu.test;public class Synchronized {class Test {public synchronized void testFirst() {print("testFirst");}public…