bak*_*kua 1 database android asynchronous task ormlite
我有Android应用程序通过按钮从服务器异步数据同步.但是我需要按钮才能进入app的所有活动,所以我决定将updateTask作为独立类.
在updateTask中我下载了一些xml数据.然后使用bussines对象来处理它,并最终让这个bussines对象处理保存(或更新)到android db.
基于ORMLite教程,我应该通过调用OpenHelperManager.getHelper(context,DatabaseHelper.class)来获取databaseHelper.我的问题是我需要一些我目前没有的OpenHelperManager上下文.
我认为最好的方法是将活动的上下文传递给updateTask,但我该怎么做呢?将上下文进一步传递给与任何活动无关的bussines对象也不奇怪.最后:甚至是什么背景?它只是代表活动的父母还是有更深层次的目的?
谢谢 :)
这有几种方法.我很确定所有3个都应该可以工作,但我还没有自己测试过.
为AsyncTask创建一个构造函数,该构造函数接收Context并存储它,以便在执行时使用它.
AsyncTask代码
public class DataProcessor extends AsyncTask<Void, Void, Void>{
private Context mContext;
public DataProcessor(Context context){
this.mContext = context;
}
@Override
protected Void doInBackground(Void... params) {
DataBaseHelper helper = OpenHelperManager.getHelper(mContext, DatabaseHelper.class)
// Your code here
}
}
Run Code Online (Sandbox Code Playgroud)
实现代码(用于活动)
new DataProcessor(this).execute();
Run Code Online (Sandbox Code Playgroud)
调用execute方法时,将上下文作为参数传递
AsyncTask代码
public class DataProcessor extends AsyncTask<Context, Void, Void>{
@Override
protected Void doInBackground(Context... params) {
Context context = params[0];
DataBaseHelper helper = OpenHelperManager.getHelper(context, DatabaseHelper.class)
// Your code here
}
}
Run Code Online (Sandbox Code Playgroud)
实现代码(用于活动)
new DataProcessor().execute(this);
Run Code Online (Sandbox Code Playgroud)
拥有Async Task可以直接访问的上下文的静态实例.可以在这里找到一种方法:在Android上获取"上下文"的静态方法?
AsyncTask代码
public class DataProcessor extends AsyncTask<Void, Void, Void>{
@Override
protected Void doInBackground(Void... params) {
DataBaseHelper helper = OpenHelperManager.getHelper(MyApplication.getAppContext(), DatabaseHelper.class)
// Your code here
}
}
Run Code Online (Sandbox Code Playgroud)
实现代码(用于活动)
new DataProcessor().execute(this);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1497 次 |
| 最近记录: |