0

在我的活动的 onCreate 中给出以下代码:

        super.onCreate(savedInstanceState);

        setContentView(R.layout.logmenu);

        //DEBUG CODE
        new DBAdaptor(this).dropDatabase();

        if (!DBAdaptor.checkDataBase() ) {
            showDialog(DIALOG_NO_DB);
        }


        seasonSpinner = (Spinner) findViewById(R.id.seasonspinner);

        List<String> seasons = new ArrayList<String>(); 
        SQLiteDatabase db = new DBAdaptor(this).getReadableDatabase();


       /* //Select _key FROM seasons;
        Cursor results = db.query("seasons", new String[] {"_key"}, null, null, null, null, null);
        results.moveToFirst();
        do {
            String season = results.getString(results.getColumnIndex("_key"));
            seasons.add(season);
        } while (results.moveToNext());*/

如果我按所示运行它,并且将填充微调器的部分注释掉,则会发生以下情况:

  1. 视图呈现。无形中,上次运行的数据库被删除,因此下一次检查将失败
  2. 弹出一个对话框,询问我是否要初始化数据库。我点击是。
  3. 数据库初始化运行(涉及与远程服务器的通信)
  4. 数据库现在已填充并可以使用
  5. 控制返回到这个视图,空荡荡的旋转器很孤独。

但是,如果我取消注释该块,这些步骤都不会运行。相反,我得到一个 SQLiteException: "no such table: seasons: , while compile: SELECT _key FROM seasons"

为什么不执行步骤 1-5?为什么它会在我准备好之前跳转并尝试编译该查询?以及如何防止这种情况并强制它按顺序执行?

4

1 回答 1

1

我认为您的问题是您创建的对话框不会阻止该方法的其余部分,因此您仍在尝试在用户告诉应用程序(通过对话框)创建数据库之前填充微调器。

于 2012-05-25T13:13:56.950 回答