在没有上下文的异步任务中的独立类中获取ORMLite DatabaseHelper

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对象也不奇怪.最后:甚至是什么背景?它只是代表活动的父母还是有更深层次的目的?

谢谢 :)

com*_*uru 5

这有几种方法.我很确定所有3个都应该可以工作,但我还没有自己测试过.

方法1

为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)

方法2

调用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)

方法3

拥有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)