android技巧(五)一个异步+接口回调的例子
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了android技巧(五)一个异步+接口回调的例子,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4101字,纯文字阅读大概需要6分钟。
内容图文
public class DataBaseUtils { // 当前数据库地址 private String DB_PATH; // 备份后数据库保存地址 private String DB_BACKUP_PATH; private Context context; private MessageShow ms; // 备份成功状态 private final int BACKUP_OK = 1; // 备份失败状态privatefinalint BACKUP_FAIL = -1; // 恢复成功状态privatefinalint RECOVER_OK = 2; // 恢复失败状态privatefinalint RECOVER_FAIL = -2; publicinterface MessageShow{ publicvoid onPepare(); publicvoid onSuccess(); publicvoid onFail(); } public DataBaseUtils(Context context) { this.context = context; } /** * @Title: doDataBackUp * @Description: TODO(数据备份) * @param * @return void 返回类型 * @author fenglei015@deppon.com/273219 * @throws*/publicvoid 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 protectedvoid onPreExecute() { // TODO Auto-generated method stubsuper.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 protectedvoid onPostExecute(Integer result) { // TODO Auto-generated method stubsuper.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*/privatevoid 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 protectedvoid 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 publicvoid onSuccess() { // TODO Auto-generated method stub Toast.makeText(MainActivity.this,"success", Toast.LENGTH_LONG).show(); } @Override publicvoid onPepare() { // TODO Auto-generated method stub Toast.makeText(MainActivity.this,"Pepare", Toast.LENGTH_LONG).show(); } @Override publicvoid 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接口中的方法
原文:http://www.cnblogs.com/waterhorse/p/5148491.html
内容总结
以上是互联网集市为您收集整理的android技巧(五)一个异步+接口回调的例子全部内容,希望文章能够帮你解决android技巧(五)一个异步+接口回调的例子所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。