【Anrdoid】接口回调那不得不说的秘密
来源:互联网 发布:mac虚拟机哪个好用 编辑:程序博客网 时间:2024/06/03 20:38
接口回调
暴露接口
所谓接口无非就是一方在使用接口一方实现接口,这里以手机短信备份来讲,怎么在备份的工具类中得到短信的总条数和已经备份过的条数来供自己的程序使用呢(如设置progressBar
显示备份进度等)public class SmsUtils { //在自己的程序中定义一个接口,并提供相应方法 public interface BackUpStatusListener{//在类中定义一个接口 /** * 在备份短信之前 max 总的进度 * @param max */ void beforeBackup(int max); /** * 正在备份的进度. * @param process */ void onBackUpProcess(int process); }/** * 备份短信的工具方法 * @param context 上下文 * @param fos 备份到哪个文件输出流里面. * @throws Exception */public static void backUp(Context context,FileOutputStream fos,BackUpStatusListener listener) throws Exception {//在自己的方法中使用接口 ContentResolver resolver = context.getContentResolver(); Uri uri = Uri.parse("content://sms/"); XmlSerializer serializer = Xml.newSerializer(); serializer.setOutput(fos, "utf-8"); serializer.startDocument("utf-8", true); serializer.startTag(null, "smss"); Cursor cursor = resolver.query(uri, new String[]{"address","date","type","body"}, null, null, null); //pd.setMax(cursor.getCount());//设置初始化的总长度 listener.beforeBackup(cursor.getCount()); //调用接口中的方法,将短信的总条数传给接口的参数 int total = 0; while(cursor.moveToNext()){ serializer.startTag(null, "sms"); serializer.startTag(null, "address"); String address = cursor.getString(0); serializer.text(address); serializer.endTag(null, "address"); serializer.startTag(null, "date"); String date = cursor.getString(1); serializer.text(date); serializer.endTag(null, "date"); serializer.startTag(null, "type"); String type = cursor.getString(2); serializer.text(type); serializer.endTag(null, "type"); serializer.startTag(null, "body"); String body = cursor.getString(3); serializer.text(body); serializer.endTag(null, "body"); serializer.endTag(null, "sms"); fos.flush(); total++; //pd.setProgress(total); listener.onBackUpProcess(total);//调用接口中的方法将已经备份了的短信数传递给相应方法的参数,由于这个接口的实现类是由调用者实现的,这里是多态,真正执行的接口的方法是调用者实现的方法,这里讲短信的数量传递给方法的参数,所以调用者就能再实现类的方法中通过参数得到短信数 Thread.sleep(1000); } serializer.endTag(null, "smss"); serializer.endDocument(); fos.flush(); fos.close();}
}
“`实现接口并实现相应的方法,直接就通过回调方法中的参数得到相应的数据
SmsUtils.backUp(getApplicationContext(), fos, new BackUpStatusListener() { @override public void onBackUpProgress(int process) { pd.setProgress(process);//通过方法中的参数我们就能得到数据 } @override public void beforeBackUp(int max) { pd.setMax(max); }}
欢迎androider关注微信公众号:爱安卓
0 0
- 【Anrdoid】接口回调那不得不说的秘密
- IE9:九个不得不说的秘密
- AR技术不得不说的秘密
- Android NDK不得不说的秘密
- write和read的不得不说的秘密
- mvc与三层架构不得不说的秘密
- Mysql与cmd不得不说的秘密
- 关于switch不得不说的几点小秘密
- 魔镜告诉我芙蓉姐姐与古天乐不得不说的秘密
- JavaScript操作iframe之不得不说的秘密(一)
- 局部变量与成员变量不得不说的秘密!
- 我与户外充气帐篷不得不说的秘密
- ListView,GridView和适配器Adapter不得不说的秘密
- 开源网站和镜像站点不得不说的秘密
- 浅谈Android中 Handler、Looper、Message不得不说的秘密
- JavaScript操作iframe之不得不说的秘密(一)
- JavaWEB中web.xml和servlet不得不说的秘密。
- HR8P506,FLASH的IAP操作与RAM不得不说的秘密
- Problem I: 下面的函数功能是x的y次方.
- iOS使用ffmpeg播放rstp实时监控视频数据流
- var目录详解
- 剑指offer之编程(七)
- 用小猫统计制作运动员评价管理系统:主从表的数据录入界面初步弄成这样
- 【Anrdoid】接口回调那不得不说的秘密
- GDOI2016 总结
- Unity3D游戏开发之虚拟现实项目开发流程
- 字符串删除空格问题
- 《金刚经》
- this Virtual Directory does not allow contents to be listed. 网站默认文档没有加入对应的比如index.html
- poj 1458 Common Subsequence -- 最长公共子序列
- 题目1026:又一版 A+B 学习
- Java语言JDBC数据库