Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在处理不同类的asynctask类中使用databasehelper类_Java_Android_Database_Android Asynctask_Android Sqlite - Fatal编程技术网

Java 如何在处理不同类的asynctask类中使用databasehelper类

Java 如何在处理不同类的asynctask类中使用databasehelper类,java,android,database,android-asynctask,android-sqlite,Java,Android,Database,Android Asynctask,Android Sqlite,大家好,我遇到了一个问题,问题是我有三个类,如下所示,我想在AsyncTask类中实例化我的DatabaseHelper类。您能帮我一下吗?我如何在AsyncTask类中获取上下文 问题已解决 主要活动类 public class MainActivity extends Activity { ... FetchData fetchData = new FetchData(); fetchData.execute(); ... } 数据库助手 public class DatabaseHel

大家好,我遇到了一个问题,问题是我有三个类,如下所示,我想在AsyncTask类中实例化我的DatabaseHelper类。您能帮我一下吗?我如何在AsyncTask类中获取上下文

问题已解决

  • 主要活动类

    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);
    ....
    }
    
  • 获取数据类

    public class FetchData extends AsyncTask<String, String, String> {
    ....
    DatabaseHelper db = new DatabaseHelper(); //need context here!!!
    ....
    }
    
  • 更新的MainActivity类

        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
         }
     }
    
    Class myStatic{
    private  static Context mContext;
    
    
    static public void setContext(Context c);
    mContext = c;
    }
    
    static public Context getContext(){
    return mContext;
    }
    
    }
    

    如果您不能更改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();
    

    感谢您的快速重播Kasra,但这对我不起作用,因为我的asynctask类声明是
    asynctask
    。你还有别的建议吗?
    Context myContext = myStatic.getContext();