gpt4 book ai didi

java - 如何将上下文从 AyncTask 传递到 DatabaseHandler

转载 作者:行者123 更新时间:2023-12-01 13:26:43 26 4
gpt4 key购买 nike

我有三个 java 文件,Main Activity 通过以下方式调用 AsyncTask:

AsyncTaskRunner backgroundTask = new AsyncTaskRunner();
backgroundTask.execute();

这将执行任务(http 连接到 pho 文件并返回 JSON 文件)。在 PostExcecute 上,我尝试通过运行以下命令将结果写入 Android 设备上的 SQLlite DB:

 class AsyncTaskRunner extends AsyncTask<Void, Void, String> {

protected void onPostExecute(String result) {
// super.onPostExecute(result);

DatabaseHandler db = new DatabaseHandler(this);
try{
JSONArray arr = new JSONArray(result);
db.dropAll();
for (int i=0; i<arr.length(); i++){
JSONObject jObj = arr.getJSONObject(i);
db.addEvent(new Event(jObj.getString("course"), jObj.getString("date"), jObj.getString("time"), jObj.getString("event")));
}
}
catch (JSONException e) {e.printStackTrace();}

}

问题出现在这里 = new DatabaseHandler(this),因为我需要将 Context 传递给 DatabaseHandler。

这是 DatabaseHandler 的开始:

public DatabaseHandler(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}

DatabaseHandler db = new DatabaseHandler(this) 从 MainActivity 调用时工作正常。

最佳答案

您可以更改 AsyncTask 以在其构造函数中接收上下文。

所以你的代码看起来像这样:

class AsyncTaskRunner extends AsyncTask<Void, Void, String> {

private Context ctx;
public AsyncTaskRunner(Context ctx){
this.ctx = ctx;
}

protected void onPostExecute(String result) {
// super.onPostExecute(result);

DatabaseHandler db = new DatabaseHandler(ctx);
try{
JSONArray arr = new JSONArray(result);
db.dropAll();
for (int i=0; i<arr.length(); i++){
JSONObject jObj = arr.getJSONObject(i);
db.addEvent(new Event(jObj.getString("course"), jObj.getString("date"), jObj.getString("time"), jObj.getString("event")));
}
}
catch (JSONException e) {e.printStackTrace();}

}

关于java - 如何将上下文从 AyncTask 传递到 DatabaseHandler,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21783334/

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