如何在Android上运行代码在Android中打开?

时间:2011-08-03 07:55:35

标签: oncreate android

我的Android应用需要用户创建一个帐户才能使用该应用。帐户信息存储在SQLite数据库中。当应用程序启动时,我会检查用户是否有帐户,如果没有,我会为用户显示注册活动。

现在我收到用户的报告,即使他们已经创建了帐户,他们有时也会参加注册活动。当他们关闭应用程序并再次重新打开它时会发生这种情况。

这是我正在使用的代码,我需要弄清楚问题可能是什么:

//MyApplication.java
public class MyApplication extends Application {
    private DataBaseUtility dbu;
    public boolean hasAccount;  

    @Override
    public void onCreate() {
        super.onCreate();

        //Init sqlite database
        this.dbu = new DataBaseUtility(this);

        //This loads the account data from the database and returns true if the user has already created an account
        this.hasAccount = loadAccount();
    }

    public boolean loadAccount() {
        boolean loadedData = false;

        String query = "SELECT data FROM tblaccount WHERE tblaccount.deleted=0";
        Cursor cursor = this.dbu.getCursor(query);
        if (cursor != null) {
            while (cursor.moveToNext()) {
                loadedData = true;
            }
            cursor.close();
        }

        return loadedData;
    }
}

//MainActivity.java
public class MainActivity extends TabActivity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        MyApplication application = (MyApplication)getApplication();
        if (!application.hasAccount) {
            //Take the user to the sign up activity
        }
}

我的想法是,有时MainActivity.onCreate()可能会在MyApplication.onCreate()之前运行。可以吗?

1 个答案:

答案 0 :(得分:3)

application的{​​{1}}中,您正在检查用户是否有帐户并设置了布尔值。

如果用户通过onCreate的布尔值拥有帐户,则您正在检查MainActivity的{​​{1}}。

{p} onCreate application application onCreate() MainActivity onCreate() application onCreate()执行Runnable <{不可能发生不同的执行路径,并且由于DataBaseUtility MainActivity application.hasAccount没有public class MainActivity extends TabActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); MyApplication application = (MyApplication)getApplication(); if (!application.hasAccount) { //Take the user to the sign up activity //if(successful) application.hasAccount = true } } ,因此它是100%的保证。

请确保您SharedPreferences没有任何Runnables。

无论如何 STILL 有几种方法可以重现错误!我现在不会陈述这些,但是当你看到时,你可以知道它们:

<强>解

boolean isOpened = false; //When I need to open if(!isOpened){ //open isOpened = true; } //When I need to close if(isOpened){ //close isOpened = false; } onDestroy() { //every onDestroy if(isOpened){ //close } } 您忘记在成功注册后更新{{1}}〜

{{1}}

避免数据库异常

我用这个:

备注为数据库-i.e使用更强的持久状态保存会好得多。 {{1}}

{{1}}