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

SQLiteOpenHelper无法调用onCreate吗?

谷梁迪
2023-03-14
问题内容

我正在尝试使用在Android手机上创建本地数据库sqlite

我有一个帮助器类,如下所示,该类用于创建数据库并提供“帮助”。

我想在我的代码的主要部分中创建此类的对象,并在其中创建数据库和表。

问题:

每当我创建该类的对象时,它似乎都不会onCreate在助手中调用该方法。我以为这应该发生。我认为这onCreate基本上是该类的构造函数。(我相信我错了)

  • 那么,为什么不调用该onCreate方法呢?
  • 或者如何在创建类对象的地方创建数据库和表?
  • 如果这不是一个好的方法,哪种更好的方法呢?
public class SmartDBHelper extends SQLiteOpenHelper {

    private static final String DATABASE_NAME = "smart_lite_db.db";
    private static final int DATABASE_VERSION = 2;
    private static final String NOTIFY_TABLE_NAME = "user_notify_data";
    private static final String HR_TABLE_NAME = "user_hr_data";
    private static final String NOTIFY_TABLE_CREATE = 
        "CREATE TABLE " + NOTIFY_TABLE_NAME + 
        " (counter INTEGER PRIMARY KEY, " + 
        "userresponse INTEGER, " + 
        "notifytime INTEGER);";
    private static final String DATA_TABLE_CREATE = 
        "CREATE TABLE " + HR_TABLE_NAME +
        " (counter INTEGER PRIMARY KEY, " +
        "hr INTEGER, " +
        "act INTEGER, " +
        "timestamp INTEGER);";

    public SmartDBHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
        // TODO Auto-generated constructor stub
    }


    @Override
    public void onCreate(SQLiteDatabase db) {
        // TODO Auto-generated method stub
        Log.v("smartdbhelper", "before creation");
        db.execSQL(NOTIFY_TABLE_CREATE);
        Log.v("smartdbhelper", "middle creation");
        db.execSQL(DATA_TABLE_CREATE);
        Log.v("smartdbhelper", "after creation");
    }


    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // TODO Auto-generated method stub

    }

}
public class SmartApp extends Activity implements OnSharedPreferenceChangeListener {
   private SmartDBHelper dBHelper;
   public void onCreate(Bundle savedInstanceState) {
      //where i am wanting to create the database and tables
      dBHelper = new SmartDBHelper(getContext());
   }
}

问题答案:

onCreate不是数据库类的构造函数。仅当您尝试打开不存在的数据库时才调用它。要打开/创建数据库,您需要添加对以下方法之一的调用:

public class SmartApp extends Activity implements OnSharedPreferenceChangeListener {
   private SmartDBHelper dBHelper;
   public void onCreate(Bundle savedInstanceState) {
      //where i am wanting to create the database and tables
      dBHelper = new SmartDBHelper(getContext());
      // open to read and write
      dBHelper.getWritableDatabase();
      // or to read only
      // dBHelper.getReadableDatabase();
   }
}

它有点大,但是这是我的DatabaseAdapter,您可以看一下:http
:
//saintfeintcity.org/projects/sfc/repository/entry/trunk/src/org/saintfeintcity/database/GameDbAdapter.java



 类似资料:
  • 问题内容: 我正在尝试制作我的第一个Android应用程序。我注意到,如果数据库不存在,则不会调用该方法来创建表。但是,即使我尝试调试,该方法也无法正常工作。 请查看下面的代码,并给我任何建议。任何帮助将不胜感激。 问题答案: 我也遇到了 SQLiteOpenHelper的 麻烦。对我有用的是存储成员变量 在SQLiteOpenHelper子类中并调用 在构造函数中。 该问题的答案还包括一些有用的

  • 我遇到了有趣的意图工作流处理。我创建了一个通知,如下所示: 当通知到达用户时,我希望当他点击它时 MainActivity.class将处理此意图。我在中处理有关意图的信息。 如果我点击应用程序外的通知,一切正常。活动正确地处理了这个意图并显示了我所期望的。 但是当我在我的应用程序中点击通知时,我的和没有触发。我以为它会被创建为的新实例 你能解释一下这是默认行为吗?我应该如何处理这种情况? 在测试

  • 本文向大家介绍Android 使用SQLiteOpenHelper类,包括了Android 使用SQLiteOpenHelper类的使用技巧和注意事项,需要的朋友参考一下 示例            

  • 在onViewCreated中,我设置了Observer对象,以便在LiveData中所做的任何更改都可以在这里得到更改通知: 在ViewModel类中,我将LiveData参数设置为: 在init中,我设置了一个观察者:

  • 我尝试在每次创建活动时运行以下线程。它第一次工作,但如果我按下后退按钮并尝试再次导航到活动,它总是崩溃第二次。我怎样才能确保这个线程每次都运行成功呢?

  • 我们SqliteOpenHelper的基本组成是数据库的创建和更新,并提供了一个SqliteDatebase,使得我们可以用它来工作。查询可以被抽取出来放在其它的类中: class ForecastDbHelper() : ManagedSQLiteOpenHelper(App.instance, ForecastDbHelper.DB_NAME, null, ForecastDb