gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-30 21:52:00 25 4
gpt4 key购买 nike

我有一个安卓应用程序,通过按下按钮从服务器同步数据。但是我需要按钮出现在应用程序的所有 Activity 中,所以我决定将 updateTask 作为独立类。

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

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

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

谢谢:)

最佳答案

这里有几种方法。我很确定这 3 个都应该有效,但我还没有亲自测试过它们。

方法一

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

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

实现代码(针对 Activity )

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

实现代码(针对 Activity )

new DataProcessor().execute(this);

方法三

拥有异步任务可以直接访问的上下文的静态实例。可以在这里找到一种方法: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
}
}

实现代码(针对 Activity )

new DataProcessor().execute(this);

关于android - 在没有上下文的异步任务中获取独立类中的 ORMLite DatabaseHelper,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13885028/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com