android技巧(五)一个异步+接口回调的例子
public class DataBaseUtils {
// 当前数据库地址
private String DB_PATH;
// 备份后数据库保存地址
private String DB_BACKUP_PATH;
private Context context;
private MessageShow ms;
// 备份成功状态
private final int BACKUP_OK = 1;
// 备份失败状态
private final int BACKUP_FAIL = -1;
// 恢复成功状态
private final int RECOVER_OK = 2;
// 恢复失败状态
private final int RECOVER_FAIL = -2;
public interface MessageShow{
public void onPepare();
public void onSuccess();
public void onFail();
}
public DataBaseUtils(Context context) {
this.context = context;
}
/**
* @Title: doDataBackUp
* @Description: TODO(数据备份)
* @param
* @return void 返回类型
* @author fenglei015@deppon.com/273219
* @throws
*/
public void doDataBackUp(String DB_PATH, String DB_BACKUP_PATH,MessageShow ms) {
this.DB_PATH = DB_PATH;
this.DB_BACKUP_PATH = DB_BACKUP_PATH;
this.ms=ms;
new BackUpTask().execute();
}
/**
* @ClassName: BackUpTask
* @Description: TODO(数据库备份异步任务)
* @author fenglei015@deppon.com/273219
* @date 2015-12-25 上午11:10:58
*
*/
@TargetApi(Build.VERSION_CODES.CUPCAKE)
class BackUpTask extends AsyncTask<String, Void, Integer> {
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
if(ms!=null) {
ms.onPepare();
}
}
@Override
protected Integer doInBackground(String... params) {
// TODO Auto-generated method stub
// 默认路径 /data/data/(包名)/databases/*.db
File dbFile = context.getDatabasePath(DB_PATH);
File exportDir = new File(DB_BACKUP_PATH);
int result = 0;
if (!exportDir.exists()) {
exportDir.mkdirs();
}
File backup = new File(exportDir, dbFile.getName());
try {
backup.createNewFile();
fileCopy(dbFile, backup);
result = BACKUP_OK;
} catch (Exception e) {
Log.e("backup_error", e.getMessage());
result = BACKUP_FAIL;
}
return result;
}
@Override
protected void onPostExecute(Integer result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
switch (result) {
case BACKUP_OK:
if(ms!=null) {
ms.onSuccess();
}
break;
case BACKUP_FAIL:
if(ms!=null) {
ms.onFail();
}
break;
}
}
}
/**
* @Title: fileCopy
* @Description: TODO(文件拷贝方法)
* @param @param dbFile
* @param @param backup
* @param @throws IOException 设定文件
* @return void 返回类型
* @author fenglei015@deppon.com/273219
* @throws
*/
private void fileCopy(File dbFile, File backup) throws IOException {
// TODO Auto-generated method stub
FileChannel inChannel = new FileInputStream(dbFile).getChannel();
FileChannel outChannel = new FileOutputStream(backup).getChannel();
try {
inChannel.transferTo(0, inChannel.size(), outChannel);
} catch (IOException e) {
// TODO Auto-generated catch block
Log.e("fileCopy_error", e.getMessage());
} finally {
if (inChannel != null) {
inChannel.close();
}
if (outChannel != null) {
outChannel.close();
}
}
}
}
调用DataBaseUtils中的doDataBackUp(String DB_PATH, String DB_BACKUP_PATH,MessageShow ms) 方法
public class MainActivity extends Activity {
private String DB_BACKUP_PATH=Environment.getExternalStorageDirectory()+"/feng_contactsBackup";
private String DATABASE_PATH=Environment.getExternalStorageDirectory() + "/ttttest.db";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
DatabaseUtils bru=new DatabaseUtils(MainActivity.this);
bru.doDataBackUp(DB_PATH, DB_BACKUP_PATH,new MessageShow() {
@Override
public void onSuccess() {
// TODO Auto-generated method stub
Toast.makeText(MainActivity.this,"success", Toast.LENGTH_LONG).show();
}
@Override
public void onPepare() {
// TODO Auto-generated method stub
Toast.makeText(MainActivity.this,"Pepare", Toast.LENGTH_LONG).show();
}
@Override
public void onFail() {
// TODO Auto-generated method stub
Toast.makeText(MainActivity.this,"Fail", Toast.LENGTH_LONG).show();
}
});
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
Log.e("DB_ERROR", "Get bean dao error cause by " + e.getMessage());
}
}
}
对整个异步回调使用的理解:
1.class A,class B
2.class A实现接口callback
3.class B拥有一个参数为callback接口类型的函数bMethod(callback cb)
4.class A运行时调用class B中的函数bMethod(callback cb),以自身传入参数
5.class B已取得A,就可以随时回调A所实现的callback接口中的方法
android技巧(五)一个异步+接口回调的例子的更多相关文章
- Android实战之 万能的接口回调
转载请标明原地址:http://blog.csdn.net/gaolei1201/article/details/47084111 前言:本人也算是自学"成才",呵呵,大学时尽管学 ...
- android app使用微信登录接口回调没有被执行的问题研究
本人开发的一个app使用了sharesdk集成微信登录功能,在测试的过程中微信授权登录界面有调用,但是授权后原应用的回调没有被执行 应用的包名是com.kimi.searcher 首先,确认微信点击授 ...
- JAVA异步加回调的例子
package com.sunchao.callback; /** * callback interface * @author Administrator * */ public interface ...
- Android系列之Fragment(三)----Fragment和Activity之间的通信(含接口回调)
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...
- js同步、异步、回调的执行顺序以及闭包的理解
首先,记住同步第一.异步第二.回调最末的口诀 公式表达:同步=>异步=>回调 看一道经典的面试题: for (var i = 0; i < 5; i++) { setTimeout( ...
- Python怎么测试异步接口
当业务处理比较耗时时, 接口一般会采用异步处理的方式, 这种异步处理的方式又叫Future模式. 一般流程 当你请求一个异步接口,接口会立刻返回你一个结果告诉你已经开始处理,结果中一般会包含一个任务i ...
- Android接口回调机制
开发中,接口回调是我们经常用到的. 接口回调的意思即,注册之后并不立马执行,而在某个时机触发执行. 举个例子: A有一个问题不会,他去问B,B暂时解决不出来,B说,等我(B)解决了再告诉你(A)此时A ...
- (转)Android之接口回调机制
开发中,接口回调是我们经常用到的. 接口回调的意思即,注册之后并不立马执行,而在某个时机触发执行. 举个例子: A有一个问题不会,他去问B,B暂时解决不出来,B说,等我(B)解决了再告诉你(A)此时A ...
- Android开发之自定义组件和接口回调
说到自定义控件不得不提的就是接口回调,在Android开发中接口回调用的还是蛮多的.在这篇博客开始的时候呢,我想聊一下iOS的自定义控件.在iOS中自定义控件的思路是继承自UIView, 在UIVie ...
随机推荐
- DOM加载顺序
最近一直在困扰dom的加载顺序问题,经常会遇到以为绑定好的事件不响应等情况,一头雾水,直到请教了周围的同事,才发现了解dom的加载顺序是多么的重要. 关于这个问题,其实网上已经有一些介绍,但是我觉得并 ...
- php empty,isset,is_null比较(差异与异同)
php empty,isset,is_null比较(差异与异同) http://www.cnblogs.com/chengmo/archive/2010/10/18/1854258.html
- Tomcat version 7.0 only supports J2EE 1.2, 1.3, 1.4, and Java EE 5 and 6 Web modules
解决方案: 找到如下文件 将"jst.web"的version改低一些
- Sql Server 删除所有表(转)
http://www.cnblogs.com/jys509/p/3589468.html 首先必须要清空所有表的外键 DECLARE c1 cursor for select 'alter tabl ...
- 20145236 GDB调试汇编堆栈过程分析
GDB调试汇编堆栈过程分析 首先需要输入sudo apt-get install libc6-dev-i386安装一个库才能产生汇编代码,然后输入gcc - g example.c -o exampl ...
- SAP连接电脑串口读数(电子称,磅等数据读取)
这是几年前做的了,一直都不想分享出来,后来想想为了能够给大家点想法,献出来了... 这是一个电脑读称的方法,一般用COMM口连接的电子设备都可参考. 如果是对串口参数不确定的,可以网上找个串口测试工具 ...
- 20169212《Linux内核原理与分析》 第十周作业
云课堂回顾学习 1. 进程调度的时机 中断处理过程(包括时钟中断.I/O中断.系统调用和异常)中,直接调用schedule(),或者返回用户态时根据need_resched标记调用schedule() ...
- 20169212《Linux内核原理与分析》第四周作业
Linux第四周作业 1. 堆栈知识 首先回顾了下堆栈相关的知识,堆栈机制是高级语言可以运行的一个基础,这一块需要重点掌握.函数发生调用时,如图 call指令:将eip的按顺序执行的下一条指令(因为在 ...
- Redis常用命令入门3:列表类型
列表类型 列表类型也是一个我们很长要用到的一个类型.比如我们发博客,要用到博客列表.如果没有列表我们就只能遍历键来获取所有文章或一部分文章了,这个语法是keys,但是这个命令需要遍历数据库中的所有键, ...
- WPF附加属性
附加属性实质也是依赖属性,是说一个属性本来不属于某个对象,但由于某种需求被后来附加上的,也就是说把对象放入一个特定环境后才具有的属性 例子:人在学校有年纪和班级两个属性,人放在学校里会获得年级和班级两 ...