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

时间:2012-12-14 19:23:22

标签: android database asynchronous task ormlite

我有Android应用程序通过按下按钮从服务器进行异步数据同步。但是我需要按钮才能进入app的所有活动,所以我决定将updateTask作为独立类。

在updateTask中我下载了一些xml数据。然后使用bussines对象来处理它,并最终让这个bussines对象处理保存(或更新)到android db。

基于ORMLite教程,我应该通过调用OpenHelperManager.getHelper(context,DatabaseHelper.class)来获取databaseHelper。我的问题是我需要一些我目前没有的OpenHelperManager上下文。

我认为最好的方法是将活动的上下文传递给updateTask但是我该怎么做?将上下文进一步传递给与任何活动无关的bussines对象也不奇怪。最后:甚至是什么背景?它只是代表活动的父母还是有更深层次的目的?

谢谢:)

1 个答案:

答案 0 :(得分: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
    }
}

实施代码(针对某项活动)

new DataProcessor(this).execute();

方法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
    }
}

实施代码(针对某项活动)

new DataProcessor().execute(this);

方法3

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