1

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

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

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

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

谢谢 :)

4

1 回答 1

5

这里有几种方法。我很确定这三个都应该工作,但我自己没有测试过它们。

方法一

为 AsyncTask 创建一个构造函数,该构造函数接受 Context 并将其存储,以便您可以在它执行时使用它。

异步任务代码

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

实现代码(用于 Activity)

new DataProcessor(this).execute();

方法二

调用execute方法时将上下文作为参数传入

异步任务代码

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

实现代码(用于 Activity)

new DataProcessor().execute(this);

方法三

有一个异步任务可以直接访问的上下文的静态实例。可以在这里找到一种方法:Static way to get 'Context' on Android?

异步任务代码

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

实现代码(用于 Activity)

new DataProcessor().execute(this);
于 2012-12-19T23:31:51.527 回答