Android SQLiteOpenHelper: Why onCreate() method is not called?

前端 未结 10 720
死守一世寂寞
死守一世寂寞 2020-12-08 18:38

I am trying to make my first Android app. I noticed that the SQLiteOpenHelper.onCreate() method is not called to create tables if the database not exists. Howev

相关标签:
10条回答
  • 2020-12-08 19:00

    I have also had trouble with the SQLiteOpenHelper. What worked for me was storing a member variable

    SQLiteDatabase db;
    

    In the SQLiteOpenHelper subclass and calling

     db = getWritableDatabase();
    

    in the constructor.

    The answer to this question also includes helpful information: SQLiteOpenHelper failing to call onCreate?

    I hope this helps!

    0 讨论(0)
  • 2020-12-08 19:04

    I had a similar problem however it was not the OnCreate call that was the issue.

    In the example code above, Kevin explained that the OnCreate is not called if the database already exists. However if, like me, you are using multiple tables from separate activities, then though you may have created the database already, the table associated with this activity may yet have not been created. Hence when you attempt to set the cursor data on a non-existent table, you will invoke an exception.

    My solution was define a separate class called CreateTable which is called both from the OnCreate override and from the constructor after the

    db = getWritableDatabase();

    0 讨论(0)
  • 2020-12-08 19:07

    In my case, it was not being called because the database already existed! So, if possible, make sure to delete your app and install it back and only then check if it is being called or not.

    0 讨论(0)
  • 2020-12-08 19:08

    I had a similar problem where onCreate wasn't executed. Maybe this is of any use for someone even though it turned out being a different problem.

    I was working on the database before and had already created one long time before. So now after making changes in onCreate() I was hoping to find the new tables created. But the SQLiteOpenHelper never called onCreate() again. Reason was, the database already existed. I was still working with the same device as before and consequently with the already existing (old) databse.

    But there is hope. When the system sees a database with that name already exists, it also checks whether the version number is correct. In that case I simply forgot the database already existed. My solution was simply changing the version number. So onUpgrade() was called offering options for onCreate() changes.

    So options were either uninstalling the complete app (and with it the database) or call onCreate again after upgrading the version number (and for example dropping) the old table and calling onCreate() again.

    In any case, if onCreate() is not called, check twice if the database exists. Otherwise it's not called again.

    0 讨论(0)
提交回复
热议问题