我有我的主类设置和工作线程,我在run()
中提出的一个早期请求是调用我的第二个名为login的类。我是这样做的:
login cLogin = new login();
cLogin.myLogin();
类登录如下所示:
package timer.test;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.widget.Toast;
public class login extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// setContentView(R.layout.main);
}
public void myLogin() {
// prepare the alert box
AlertDialog.Builder alertbox = new AlertDialog.Builder(this);
// set the message to display
alertbox.setMessage(this.getString(R.string.intro));
// add a neutral button to the alert box and assign a click listener
alertbox.setNeutralButton("Register New Account",
new DialogInterface.OnClickListener() {
// click listener on the alert box
public void onClick(DialogInterface arg0, int arg1) {
// the button was clicked
}
});
// add a neutral button to the alert box and assign a click listener
alertbox.setNegativeButton("Login",
new DialogInterface.OnClickListener() {
// click listener on the alert box
public void onClick(DialogInterface arg0, int arg1) {
// the button was clicked
}
});
// show it
alertbox.show();
}
10-01 14:33:33.028: ERROR/AndroidRuntime(440):
java.lang.RuntimeException: Unable to start activity ComponentInfo{timer.test/timer.test.menu}:
java.lang.IllegalStateException:
System services not available to Activities before onCreate()
我把onCreate
放进去但仍然遇到同样的问题。我该如何解决这个问题?
答案 0 :(得分:1)
您有几个选择:
1)将您的public void myLogin(){..}移至您的主要活动。我建议使用此解决方案,因为您不需要为您的目的进行其他活动。
2)在调用myLogin()之前,在登录类上调用startActivity。由于您继承了Activity onCreate,因此在调用其他任何内容之前需要调用它。这就是你得到例外的原因。 startActivity的调用方式如下:
Intent i = new Intent(this, login.class);
startActivity(i);
答案 1 :(得分:1)
你不能这样做只是因为你正在使用上下文
AlertDialog.Builder alertbox = new AlertDialog.Builder(this); //this is the activity context passed in..
在通过startActivity调用Activity onCreate之前,上下文不可用。而不是通过构造登录对象的新实例,您可以尝试从调用此方法的活动传递上下文
public void myLogin(Context context) {
// prepare the alert box
AlertDialog.Builder alertbox = new AlertDialog.Builder(context);
//blah blah blah...
}
是的,永远不要通过构造函数构建一个活动实例。-.-