当前位置: 首页 > 面试题库 >

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

叶鸿煊
2023-03-14
问题内容

大家好,我被困在一个地方,问题是我有下面显示的三个类,并且我想在AsyncTask类中实例化我的DatabaseHelper类。您能否提供帮助,如何在AsyncTask类中获取上下文?

问题解决了

  1. MainActivity类
        public class MainActivity extends Activity {
    ...
    FetchData fetchData = new FetchData();
    fetchData.execute();
    ...
    }
  1. 数据库助手
        public class DatabaseHelper extends SQLiteOpenHelper {
    ....
    public DatabaseHelper(Context context) {
    super(context, DATABASE_NAME, null, DATABASE_VERSION);
    ....
    }
  1. FetchData类
        public class FetchData extends AsyncTask<String, String, String> {
    ....
    DatabaseHelper db = new DatabaseHelper(); //need context here!!!
    ....
    }

感谢Kasra,我创建了第四个类并在调用AsyncTask之前在MainActivity中使用它

  1. ContextStatic类
        public class ContextStatic {
    private static Context mContext;

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

更新了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
         }
     }

您可以通过以下行调用此AsyncTask-假设您处于活动状态:

 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();


 类似资料:
  • 问题内容: 我必须将数据上传到服务器。我正在使用与我的应用程序运行在同一进程上的服务。我应该使用单独的线程进行上传过程还是应该使用AsyncTask将数据上传到服务器? 更具体地说,我可以在服务类中使用AsyncTask吗?我应该使用它吗?此服务应始终在内存中运行,以便每5秒将数据发送到服务器。 问题答案: 是的,您可以,下面的代码每5秒运行一次。使用常规的连接代码发送零件。

  • 问题内容: 当我在一个类文件中使用代码时,它可以完美运行: 我想从其他类文件运行我的异步任务,我有代码: 下载File.java 下载FileAsync.java 我正在使用eclipse,并且我的DownloadFile.java文件中出现错误,有很多带红色下划线的代码…。我是java和android dev的新手。 问题答案: 如果可以通过某种方式将Activity类或其上下文传递给Async

  • 问题内容: 我正在Spark中将模型实现为python类,并且每次尝试将类方法映射到RDD时,它都会失败。我的实际代码更加复杂,但是这个简化的版本成为了问题的核心: 现在,如果我像这样运行模型(例如): 我收到以下错误: 例外:看来您试图从广播变量,操作或转换中引用SparkContext。SparkContext只能在驱动程序上使用,而不能在工作程序上运行的代码中使用。有关更多信息,请参见SPA

  • 目前,我在主activity类和widget类中都声明了一个AsyncTask。除了中的结果处理之外,其他代码都是一样的(在activity中,检索到的结果转到activity中的textview,而在小部件中,它转到my widget中的textview)。 我想将移动到一个外部java文件中(以避免代码重复),并通过不同的结果处理方式从其他不同的类(如我的小部件和main activity)调

  • 问题内容: 我们正在考虑将应用程序从obj-c迁移到Swift。一个问题是,我们的obj- c代码中有一个UITableView,其中包含类型为或类型的对象。基本上,它解析cellForRowAtIndexPath上具有的类型。Swift数组(据我所知)只能处理一种类型。鉴于此,我们如何处理UITableView中要使用的两种不同类型?是否会有像DataObj这样的包装对象,我们每个工作都有可精巧

  • 本文向大家介绍我们如何在HTML中使用不同的CSS类?,包括了我们如何在HTML中使用不同的CSS类?的使用技巧和注意事项,需要的朋友参考一下 在HTML中,根据元素的class属性定义样式规则。具有该类的元素将根据定义的规则进行格式化。这称为类选择器。要选择具有特定类的元素,需要编写一个句点(。)字符,后跟类的名称,例如.black 对于文档中class属性设置为black的每个元素,以黑色显示