Android中ActivityC无法显示,调用startActivity时触发异常求助
问题分析与解决方案
你遇到的InvocationTargetException本质是sendAnswer方法内部抛出了未捕获的异常,Android框架将其包装成该异常抛出。具体有两个核心问题需要修复:
1. ActivityC未在AndroidManifest.xml中注册
Android系统要求所有要启动的Activity必须在清单文件中声明,否则会直接抛出ActivityNotFoundException,这是触发InvocationTargetException的直接原因。
修复方法:
在application标签内添加ActivityC的注册声明:
<application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".ActivityB"></activity> <activity android:name=".ActivityC"></activity> <!-- 新增这一行 --> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application>
2. ActivityC中引用了不存在的控件ID
在ActivityC.java的onCreate方法中,你尝试获取R.id.textView1,但对应的activity_c.xml里并没有这个ID的TextView(现有可用ID是title和text_answer),这会导致NullPointerException——即使ActivityC能启动,也会立刻崩溃。
修复方法:
修改ActivityC.java中的代码,将控件ID改为布局中存在的ID,同时建议增加空值判断避免额外异常:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_c); Bundle extras = getIntent().getExtras(); if (extras != null) { // 增加空判断,防止Intent无额外数据时崩溃 String returnString = extras.getString("returnData"); final TextView textView = findViewById(R.id.text_answer); // 修改为布局中存在的ID textView.setText(returnString); } }
验证修复
完成以上两处修改后重新编译运行:
- MainActivity跳转到ActivityB的流程正常
- 在ActivityB输入答案后点击Send Answer,ActivityC会正常启动并显示传递的答案
内容的提问来源于stack exchange,提问作者Tarek EZZAT
相关产品推荐
相关产品推荐

