当前位置: 首页 > 知识库问答 >
问题:

如何防止我的应用程序崩溃?[副本]

鱼渝
2023-03-14
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,我如何修复它?却无法修复错误!

共有1个答案

楚德辉
2023-03-14

您没有在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