在onCreate()中启动另一个活动?

时间:2013-12-17 14:46:17

标签: android android-activity

在我的应用中,我有一个输入活动(虚拟,无布局),用于检查客户经理中的帐户:

  • 如果存在某种类型的帐户:启动主要活动
  • 否则,启动获取用户凭据的活动(将其添加到帐户)

以下是EntryActivity中的代码:

public class EntryActivity extends Activity {

// Tag
private String TAG = getClass().getSimpleName();

// Inst.
private AccountManager accountManager;
private Account[] accounts;
private Authenticator authenticator;

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

    authenticator = new Authenticator(this);

    // Check for the account in account manager
    accountManager = AccountManager.get(this);

    accounts = accountManager.getAccountsByType(HConstants.ACCOUNT_TYPE);
    int nAccounts = accounts.length;

    if(nAccounts!=0){
        // There's an account

    }
    else{
        // Prompt user to enter creds
        final Intent intent = new Intent(this, AuthenticationActivity.class);
        startActivity(intent);
    }

}

问题是,我无法启动AuthenticationActivity并收到此错误:

java.lang.IllegalStateException: System services not available to Activities before onCreate()

我该如何解决这个问题?


更新: AuthenticationActivity的代码:

public class AuthenticationActivity extends Activity {


// Instances
AccountManager accountManager = AccountManager.get(this);

// Values for email and password at the time of the login attempt.
private String mEmail;
private String mPassword;

// UI references.
private EditText mEmailView;
private EditText mPasswordView;
private View mLoginFormView;
private View mLoginStatusView;
private TextView mLoginStatusMessageView;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.authentication_activity);

    // Set up the login form.
    mEmailView = (EditText) findViewById(R.id.email);
    mEmailView.setText(mEmail);

    mPasswordView = (EditText) findViewById(R.id.password);

    mLoginFormView = findViewById(R.id.login_form);
    mLoginStatusView = findViewById(R.id.login_status);
    mLoginStatusMessageView = (TextView) findViewById(R.id.login_status_message);

}

4 个答案:

答案 0 :(得分:1)

将您的支票放入onStart()而不是onCreate()。在开始其他活动后,请致电finish()以停止虚拟活动。

答案 1 :(得分:0)

尝试使用onResume()方法。如果这不起作用,请尝试以下代码(我不完全推荐这个):

new Handler().postDelayed(new Runnable(){
   public void run(){
      //Start your activity..
   }
}

你的onResume

中的这段代码

答案 2 :(得分:0)

我猜问题就在这一行:

private String TAG = getClass().getSimpleName();

尝试在onCreate之后将其移至super方法。希望这会有所帮助。

答案 3 :(得分:0)

问题在于这一行:

AccountManager accountManager = AccountManager.get(this);

我在onCreate()之前使用了上下文(系统服务)。通过将其放在方法中,错误得到了解决。