我有三个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/

10-12 16:01