MainActivity --> Instructions or AdminLogin --> UserLogin or RegisterCandidate
即使在谷歌搜索了几个小时后,我也无法找出确切的问题。我已经检查了StackOverflow本身的几个答案,但未能找出问题所在。
错误跟踪如下:
E/AndroidRuntime: FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.palakjain.onlinevotingschool/com.example.palakjain.onlinevotingschool.AdminLogin}: java.lang.NullPointerException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2360)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2412)
at android.app.ActivityThread.access$600(ActivityThread.java:162)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1364)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:194)
at android.app.ActivityThread.main(ActivityThread.java:5388)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at com.example.suniljain.onlinevotingschool.AdminLogin.onCreate(AdminLogin.java:39)
at android.app.Activity.performCreate(Activity.java:5141)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1084)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2307)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2412)
at android.app.ActivityThread.access$600(ActivityThread.java:162)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1364)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:194)
at android.app.ActivityThread.main(ActivityThread.java:5388)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
at dalvik.system.NativeStart.main(Native Method)
主要活动代码:
public class MainActivity extends AppCompatActivity {
Button btnConductVoting, btnInstructions, btnSkipInstructions;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnConductVoting = (Button) findViewById(R.id.btnConductVoting);
btnInstructions = (Button) findViewById(R.id.btnInstructions);
btnSkipInstructions = (Button) findViewById(R.id.btnSkipInstructions);
btnConductVoting.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(MainActivity.this, AdminLogin.class);
startActivity(i);
}
});
btnInstructions.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(MainActivity.this, Instructions.class);
startActivity(i);
}
});
btnSkipInstructions.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(MainActivity.this, UserLogin.class);
startActivity(i);
}
});
}
}
public class Instructions extends AppCompatActivity{
Button btnStartVoting;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
btnStartVoting = (Button) findViewById(R.id.btnStartVoting);
btnStartVoting.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(Instructions.this, UserLogin.class);
startActivity(i);
}
});
}
}
public class AdminLogin extends AppCompatActivity{
Button btnAdminLogin;
EditText etUsername;
EditText etPassword;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
btnAdminLogin = (Button) findViewById(R.id.btnAdminLogin);
etUsername = (EditText) findViewById(R.id.etAdminPassword);
etPassword = (EditText) findViewById(R.id.etAdminPassword);
btnAdminLogin.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(etUsername.getText().toString().equals("administrator") && etPassword.getText().toString().equals("password")){
Intent i = new Intent(AdminLogin.this, RegisterCandidate.class);
startActivity(i);
}
}
});
}
}
public class UserLogin extends AppCompatActivity{
//TextView tvUserForgotPassword;
TextView tvNewUserSignUp;
//Button btnUserLogIn;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
tvNewUserSignUp = (TextView) findViewById(R.id.tvNewUserSignUp);
tvNewUserSignUp.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(UserLogin.this, NewUser.class);
startActivity(i);
}
});
}
}
public class RegisterCandidate extends AppCompatActivity{
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
}
public class NewUser extends AppCompatActivity{
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
}
更新1:我已经做了答案中建议的所有更改,但每当我单击MainActivity中的“跳过指令”按钮时,我的应用程序仍然崩溃。此外,当我从AdminLogin活动中单击“登录”按钮时,应用程序崩溃。我该怎么办?
Update2:我提到了什么是NullPointerException,我如何修复它?却无法修复错误!
您没有在AdminLogin
活动中SetContentView
。
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// set contentview here before finding views otherwise they will be null
btnAdminLogin = (Button) findViewById(R.id.btnAdminLogin);
}
只是注意,同样的问题是与你的其他活动,交叉检查。
如果您想知道什么是setcontentview
,那么在短期内,它将关联视图/UI,它将在activity
启动时显示。举个例子,如果您想在UI上显示edittext
和按钮
,那么它们必须出现在扩展名为.xml的布局文件中。(您也可以通过java代码创建视图)
我让我的学长给我解释,他说, 这是为了防止生产中的崩溃。 我完全不同意。对我来说,这不是防止应用程序崩溃的方法。这表明开发人员不知道他/她在做什么,并有疑问。 由于这个问题得到了很多关注,有些人误解了这个问题(可能是因为我没有清楚地表达它),我打算重新表达它。 以下是开发人员在这里所做的 > 编写并测试一个函数,它可以是一个只是初始化视图的小函数,也可以是一个复杂的函数,测试后它被包裹在块中。即使
我正在登录页面上工作,基于Androidhive教程和问题是在2布局下工作正常,但对于3布局应用程序将崩溃。 在androidhive教程中使用了2布局,但我想使用3,因为我收到短信然后otp然后注册,所以问题是3rd布局,它不会出现并崩溃。 Androidhive教程链接:第1部分第2部分 以下是代码: XML Java Logcat 08-29 10:48:12.426 4499-4499/i
注意:在我添加广告之前,我的应用程序运行良好,使用相同的方法 当我试图将adview添加到我的应用程序时,它会使我的应用程序崩溃,所以我删除了它,但仍然给我这个这是logcat 10-12 21:33:19.765 4993-4993/com。fm360。almorfis E/AndroidRuntime:致命异常:主进程:com。fm360。阿尔莫菲斯,PID:4993爪哇。lang.Runti
问题内容: 我一直在开发一个Android应用程序,该应用程序经常使用以防止它崩溃,即使在不需要的地方也是如此。例如, 在视图与被引用,如: 在整个应用程序中都使用这种方法。堆栈跟踪没有打印出来,很难找到问题所在。该应用程序突然关闭而不打印任何堆栈跟踪。 我请我的长辈向我解释一下,他说: 这是为了防止生产崩溃。 我完全不同意 。对我来说,这不是防止应用程序崩溃的方法。它表明开发人员 不 知道自己在
当我在1到9之间选择一个数字并在控制台中输入一个数字时,该方法会工作并进行正确的移动。但我的问题是如何避免当我输入一个字母而不是一个数字时,程序就崩溃了。
这就是它崩溃的地方 01-12 13:44:12.571 296 26-29688/ca.dti.grounded.app E/OtherService:AsynchChecker 287:73 java.lang.IllegalStateException:Parcel已完成!在android.os.binderproxy.transactNative(本机方法)在android.os.bind