跳转GalleryActivity后Android模拟器停止运行,未声明Activity报错如何解决
问题原因
报错日志已经明确指向根因:你创建的GalleryActivity没有在AndroidManifest.xml中完成注册。Android系统要求所有应用内置的Activity组件必须提前在清单文件中声明,否则启动时无法找到对应组件,就会抛出ActivityNotFoundException导致应用直接崩溃。
另外就算完成注册,当前的GalleryActivity代码还有隐藏bug,跳转后依然会崩溃,需要同步修复。
解决步骤
- 第一步:在AndroidManifest.xml中注册GalleryActivity
打开项目的app/src/main/AndroidManifest.xml文件,在<application>标签内部添加如下注册代码:
<activity android:name=".GalleryActivity" android:exported="false" />
如果你的GalleryActivity不在应用主包下,把android:name的值替换为类的全路径,比如报错里的pickture.GalleryActivity即可。
- 第二步:修复GalleryActivity的空指针问题
当前GalleryActivity没有加载布局,也没有初始化imageView变量,跳转后调用setImageURI会触发空指针崩溃,修改代码如下:
首先创建布局文件res/layout/activity_gallery.xml,示例内容:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <ImageView android:id="@+id/iv_gallery" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout>
然后修改GalleryActivity的代码:
public class GalleryActivity extends AppCompatActivity { ImageView imageView; private static final int PICK_IMAGE = 100; Uri imageUri; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 加载布局 setContentView(R.layout.activity_gallery); // 初始化ImageView imageView = findViewById(R.id.iv_gallery); Intent gallery = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.INTERNAL_CONTENT_URI); startActivityForResult(gallery, PICK_IMAGE); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode == RESULT_OK && requestCode == PICK_IMAGE) { imageUri = data.getData(); imageView.setImageURI(imageUri); } } }
做完以上两步即可解决崩溃问题,实现点击头像跳转相册选图的功能。
内容的提问来源于stack exchange,提问作者chen abien
相关产品推荐
相关产品推荐

