2013-12-17 128 views
0

在我的應用程序,我有一個進入活動(空,沒有佈局),檢查賬戶的客戶經理:在onCreate()中開始另一個活動?

  • 如果存在一個帳戶某些類型的:開始的主要活動
  • 否則, 開始的活動獲得用戶憑據(將其添加到帳戶)

這裏是在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); 

} 
+2

你的'setContentView'在哪裏? – Raghunandan

+0

@Raghunandan,我沒有。這基本上是啓動其他人的無形活動。 – Mahm00d

+0

AuthenticationActivity是否擴展了Activity? – Blackbelt

回答

0

的問題是在這條線:

AccountManager accountManager = AccountManager.get(this); 

onCreate()之前使用上下文(系統服務)。通過將其放入方法中,錯誤得到解決。

1

把你的支票存入onStart(),而不是onCreate()。在開始其他活動後,致電finish()停止虛擬活動。

+0

仍然收到同樣的錯誤。 – Mahm00d

0

嘗試使用onResume()方法。如果這並不直接工作,試試下面的代碼(我不完全推薦這種):

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

此代碼您的onResume內

+0

爲什麼它應該有所作爲? – Blackbelt

+0

因爲那些IllegalStateExceptions真的很奇怪,我已經閱讀Android源代碼(Activity類,Fragment類)和Google檢查一些「狀態」標誌來拋出該異常,postDelayed將讓Activity完成它的循環,然後它將能夠撥打另一個活動 – noni

0

我想這個問題是在這一行:

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

嘗試將其移動到super之後的onCreate方法中。希望這可以幫助。

+0

我評論了它,錯誤仍然存​​在。 – Mahm00d

+0

請刪除此問題 – Blackbelt

相關問題