在我的应用中,我有一个输入活动(虚拟,无布局),用于检查客户经理中的帐户:
以下是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);
}
答案 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()
之前使用了上下文(系统服务)。通过将其放在方法中,错误得到了解决。