如何在异步任务 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 中获取上下文?
问题已解决
MainActivityclass
public class MainActivity extends Activity {
...
FetchData fetchData = new FetchData();
fetchData.execute();
...
}
数据库助手
public class DatabaseHelper extends SQLiteOpenHelper {
....
public DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
....
}
获取数据class
public class FetchData extends AsyncTask<String, String, String> {
....
DatabaseHelper db = new DatabaseHelper(); //need context here!!!
....
}
#
感谢 Kasra,我创建了一个 fourh class 并在调用 AsyncTask
之前在 MainActivity 中使用它
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();
大家好我被困在一个点上,问题是我有三个 class 如下所示,我想在 AsyncTask class 中实例化我的 DatabaseHelper class。你能帮忙吗,我怎样才能在 AsyncTask class 中获取上下文?
问题已解决
MainActivityclass
public class MainActivity extends Activity { ... FetchData fetchData = new FetchData(); fetchData.execute(); ... }
数据库助手
public class DatabaseHelper extends SQLiteOpenHelper { .... public DatabaseHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); .... }
获取数据class
public class FetchData extends AsyncTask<String, String, String> { .... DatabaseHelper db = new DatabaseHelper(); //need context here!!! .... }
感谢 Kasra,我创建了一个 fourh class 并在调用 AsyncTask
之前在 MainActivity 中使用它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();