我有三个Java文件,Main活动通过以下方式调用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);
}
从MainActivity调用时,DatabaseHandler db = new DatabaseHandler(this)正常工作。
最佳答案
您可以更改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 - 如何将上下文从AsyncTask传递到DatabaseHandler,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21783334/