我有Android应用程序通过按下按钮从服务器进行异步数据同步。但是我需要按钮才能进入app的所有活动,所以我决定将updateTask作为独立类。
在updateTask中我下载了一些xml数据。然后使用bussines对象来处理它,并最终让这个bussines对象处理保存(或更新)到android db。
基于ORMLite教程,我应该通过调用OpenHelperManager.getHelper(context,DatabaseHelper.class)来获取databaseHelper。我的问题是我需要一些我目前没有的OpenHelperManager上下文。
我认为最好的方法是将活动的上下文传递给updateTask但是我该怎么做?将上下文进一步传递给与任何活动无关的bussines对象也不奇怪。最后:甚至是什么背景?它只是代表活动的父母还是有更深层次的目的?
谢谢:)
答案 0 :(得分:5)
这有几种方法。我很确定所有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
}
}
实施代码(针对某项活动)
new DataProcessor(this).execute();
调用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
}
}
实施代码(针对某项活动)
new DataProcessor().execute(this);
拥有Async Task可以直接访问的上下文的静态实例。 可以在此处找到一种方法:Static way to get 'Context' on 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
}
}
实施代码(针对某项活动)
new DataProcessor().execute(this);