如何在异步任务 class 中使用 databasehelper class 在不同的 class 上工作

How to use databasehelper class in an asynctask class working on a different class

大家好我被困在一个点上,问题是我有三个 class 如下所示,我想在 AsyncTask class 中实例化我的 DatabaseHelper class。你能帮忙吗,我怎样才能在 AsyncTask class 中获取上下文?

问题已解决

  1. MainActivityclass

    public class MainActivity extends Activity {
    ...
    FetchData fetchData = new FetchData();
    fetchData.execute();
    ...
    }
    
  2. 数据库助手

    public class DatabaseHelper extends SQLiteOpenHelper {
    ....
    public DatabaseHelper(Context context) {
    super(context, DATABASE_NAME, null, DATABASE_VERSION);
    ....
    }
    
  3. 获取数据class

    public class FetchData extends AsyncTask<String, String, String> {
    ....
    DatabaseHelper db = new DatabaseHelper(); //need context here!!!
    ....
    }
    
#

感谢 Kasra,我创建了一个 fourh class 并在调用 AsyncTask

之前在 MainActivity 中使用它
  1. ContextStatic class

    public class ContextStatic {
    private static Context mContext;
    
    public static Context getmContext() {
        return mContext;
    }
    public static void setmContext(Context mContext) {
        ContextStatic.mContext = mContext;
    }
    }
    

更新 MainActivity class

    public class MainActivity extends Activity {
    ...
    ContextStatic.setmContext(this);
    FetchData fetchData = new FetchData();
    fetchData.execute();
    ...
    }

试试这个:

 private class FetchData extends AsyncTask<Context, Void, Void> {
     protected Long doInBackground(Context... c) {
         Context myContext = c[0];
// Do your things here....
     }


     protected void onPostExecute() {
// Insert your post execute code here
     }
 }

您可以通过以下行调用此 AsyncTask - 假设您处于 activity:

 new FetchData().execute(this);

如果您无法更改 AsyncTask 减速,那么您可以尝试使用静态变量 - 尽管它不如 AsyncTask 减速那么高效和美观。试试这个:

Class myStatic{
private  static Context mContext;


static public void setContext(Context c);
mContext = c;
}

static public Context getContext(){
return mContext;
}

}

在你的主代码中,在你调用 AsyncTask 之前,调用这个:

myStatic.setContext(this);

在 AsyncTask 的 doInBackground 方法中,添加:

Context myContext = myStatic.getContext();