Kotlin中通过SharedPreference字符串启动Activity报错求助
错误原因
你之前的代码里,activityHandler::class.java获取的是String类的Class对象,而不是目标Activity的Class,系统自然找不到对应的Activity,所以抛出ActivityNotFoundException。
修复方案
步骤1:存储完整类名(推荐)
存储时最好存入Activity的完整类名(包名+类名),避免类名冲突或找不到类:
sharedSettingsData.edit() .putString("settingsLogin", "com.example.myapp.ConfigureActivity") .apply()
步骤2:读取并反射获取Activity类
通过Class.forName()方法,根据存储的完整类名反射得到目标Activity的Class对象,再启动Activity:
val activityClassName = sharedSettingsData.getString("settingsLogin", "") if (activityClassName.isNotEmpty()) { try { // 通过完整类名获取Activity的Class val activityClass = Class.forName(activityClassName) val intent = Intent(this, activityClass) startActivity(intent) } catch (e: ClassNotFoundException) { // 处理类找不到的异常,比如提示用户或跳转默认页 e.printStackTrace() } }
可选:仅存储简单类名的处理
如果只想存储类名(如"ConfigureActivity"),可以读取时拼接当前应用的包名:
val simpleClassName = sharedSettingsData.getString("settingsLogin", "") if (simpleClassName.isNotEmpty()) { try { // 拼接包名和类名得到完整类路径 val fullClassName = "${packageName}.$simpleClassName" val activityClass = Class.forName(fullClassName) val intent = Intent(this, activityClass) startActivity(intent) } catch (e: ClassNotFoundException) { e.printStackTrace() } }
注意事项
- 所有要启动的Activity必须在
AndroidManifest.xml中注册,否则即使类名正确也会报错。 - 反射操作可能抛出异常,务必添加异常捕获逻辑,避免应用崩溃。
内容的提问来源于stack exchange,提问作者mohammed_sajid
相关产品推荐
相关产品推荐

