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 ...
随机推荐
- mybatis中 ${}和#取值小记(Parameter index out of range)
mybatis mapperxml文件中有两种取值法.${}和#{} $的是原样,#的是取值并转成指定?#{ele1,jdbcType=VARCHAR} 有个坑, 错误的写法 <if test= ...
- CentOS忘记密码或者丢失口令解决方法
重启系统,然后再五秒之内按下任意键. 进入下面画面后按 [ e ] 键 把光标移动到第二行(或者找到以kernel /vmlinuz开头的),再按下 [ e ] 键 在文本结尾处空一格再添加s ...
- Linux下解压文件
unzip + 文件名 (解压.zip文件到当前目录) gunzip –c filename.gz > filename (解压.gz文件到当前目录,保留原文件) tar -zxvf - ...
- 我需要在Web上完成一个图片上传的功能(+2)
增加一个页面,用于判断传参是否正确. @{ //判断是否具备会员参数 if (UrlData.Count > 0) { Session["Arg ...
- WPF:指定的命名连接在配置中找不到、非计划用于 EntityClient 提供程序或者无效的解决方法
文/嶽永鹏 WPF 数据绑定中绑定到ENTITY,如果把数据文件做成一个类库,在UI文件中去应用它,可能遇到下面这种情况. 指定的命名连接在配置中找不到.非计划用于 EntityClient 提供程序 ...
- chrome经常崩溃解决过程
之前chrome常崩溃,也没有找到原因,就将就着用吧,一直用到今天,今天连续几次崩了,突然想到,难道是因为我访问的域名没有解析(能想到这个,是因为今天分配公司域名测试的时候常输错),于是就输入一个不存 ...
- zencart産品描述加上錨文本
首先,函數會遍曆整段描述,假如一段描述裏面有Hermes wallets這個關鍵詞,那麽函數就會對這個關鍵詞加上鏈接,至于鏈接到哪裏,上面數組裏面有,隻要把數組裏面的内容替換你想要的就可以. 那麽在z ...
- C++11 智能指针
C++ 11标准库引入了几种智能指针 unique_ptr shared_ptr weak_ptr C++内存管理机制是当一个变量或对象从作用域过期的时候就会从内存中将他干掉.但是如果变量只是一个指针 ...
- guava学习--AsyncFunction
AsyncFuntion接口与之前学习吃的使用Function和Functions进行对象转换有很密切的联系,AsyncFuction接口是Function接口的异步表现,AsyncFuction和F ...
- 字符编码笔记:ASCII,Unicode和UTF-8(转载)
作者: 阮一峰 日期: 2007年10月28日 今天中午,我突然想搞清楚Unicode和UTF-8之间的关系,于是就开始在网上查资料. 结果,这个问题比我想象的复杂,从午饭后一直看到晚上9点,才算初步 ...