Android应用通过Intent从一个Activity跳转至另一个时崩溃
解决登录页跳转注册页崩溃的排查步骤
兄弟我太懂这种卡超简单操作上的憋屈感了!折腾好几个小时就为个页面跳转,换控件改代码都没用,简直抓狂。别慌,咱们一步步排查,大概率是某个容易忽略的小细节:
第一步:先查Manifest有没有漏注册注册Activity
这是新手最容易踩的坑!如果你的RegisterActivity没在AndroidManifest.xml里声明,系统根本找不到这个页面,一点击必崩。检查下有没有这段代码:
<application ...> <!-- 你的登录Activity --> <activity android:name=".LoginActivity" /> <!-- 必须加这个!注册Activity的声明 --> <activity android:name=".RegisterActivity" /> </application>
如果是嵌套在子包下的,比如com.example.app.auth.RegisterActivity,要写全路径或者用.auth.RegisterActivity。
第二步:检查点击事件的绑定和Intent写法
不管用TextView还是Button,先确认点击事件有没有正确绑定:
- 是不是
findViewById的时候写错了控件id?比如xml里是tv_register,代码里写成tv_login,导致控件对象为null,点击时触发空指针崩溃。 - Intent的上下文和目标类有没有传错?给你贴个标准的跳转写法,对比下:
Java版本
// 在LoginActivity里的点击事件代码 TextView tvRegister = findViewById(R.id.tv_register); tvRegister.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 这里一定要用LoginActivity.this,别用getApplicationContext() Intent intent = new Intent(LoginActivity.this, RegisterActivity.class); startActivity(intent); // finish()要不要加看你需求,不想返回登录页就加,和崩溃无关 // finish(); } });
Kotlin版本
val tvRegister = findViewById<TextView>(R.id.tv_register) tvRegister.setOnClickListener { val intent = Intent(this@LoginActivity, RegisterActivity::class.java) startActivity(intent) }
第三步:排查注册Activity本身的问题
有时候不是跳转的锅,是你跳过去的注册页自己有问题!比如RegisterActivity的onCreate方法里,有没有写错布局id?或者初始化了一个不存在的控件?比如:
// 错误示例:布局id写错,导致加载布局失败崩溃 setContentView(R.layout.activity_login); // 应该是activity_register
这种情况跳转时会触发注册页的崩溃,看起来像是跳转失败,但其实是目标页的问题。
最关键的一步:看崩溃日志!
别瞎试了,打开Android Studio的Logcat,搜索FATAL EXCEPTION,里面会明确告诉你崩溃的原因:
- 如果是
ClassNotFoundException:基本就是Manifest没注册注册Activity - 如果是
NullPointerException:要么是点击的控件为null,要么是注册页里有null对象调用方法 - 如果是
InflateException:注册页的布局有问题,比如控件id写错或者布局结构错误
把日志里的错误信息和行号找出来,直接定位问题,比瞎试效率高10倍!
内容的提问来源于stack exchange,提问作者NegNeg64
相关产品推荐
相关产品推荐

