Android模拟器应用崩溃,报ClassNotFoundException错误求助
问题分析
从你提供的LogCat日志来看,核心错误是:
java.lang.ClassNotFoundException: Didn't find class "com.balashanti.rushikeshkotule.database.MainActivity"
而且你提到所有练习应用都出现这个问题,说明这不是你当前SQLite代码的逻辑问题,大概率是Android Studio的构建配置、Dex加载或者Instant Run相关的环境问题。
解决步骤(按优先级排序)
1. 清理并重建项目
这是修复类加载异常最常用的方法:
- 点击Android Studio顶部菜单栏的
Build→Clean Project - 清理完成后,点击
Build→Rebuild Project - 重启Android Studio,再重新运行应用
2. 关闭Instant Run
你的日志里出现了I/InstantRun: starting instant run server: is main process,Instant Run经常会导致新手环境出现类加载异常:
- 打开
File→Settings→Build, Execution, Deployment→Instant Run - 取消勾选
Enable Instant Run to hot swap code/resource changes on deploy - 再次执行Clean + Rebuild操作
3. 检查Multidex配置
如果你的项目启用了Multidex但配置不全,也会导致类找不到:
- 打开app模块的
build.gradle文件,在defaultConfig中添加:
defaultConfig { // 其他原有配置... multiDexEnabled true }
- 在
dependencies中添加Multidex依赖:
dependencies { // 其他原有依赖... // 如果你用Support库: implementation 'com.android.support:multidex:1.0.3' // 如果你用AndroidX: // implementation 'androidx.multidex:multidex:2.0.1' }
- 如果你没有自定义Application类,在Manifest的
application标签中添加:
<application android:name="android.support.multidex.MultiDexApplication" <!-- 或AndroidX的androidx.multidex.MultiDexApplication --> // 其他原有属性...>
4. 验证包名一致性
确保代码中的包声明、Manifest的包名、模块配置的包名完全一致:
- 检查MainActivity代码开头的
package声明是否为package com.balashanti.rushikeshkotule.database; - 确认Manifest根标签的
package属性和上述声明一致
5. 清理设备缓存
模拟器/设备的应用缓存也可能导致异常:
- 在模拟器中进入
设置→应用→ 找到你的应用 →存储→ 点击清除数据和清除缓存 - 或者直接卸载应用后重新安装
额外的SQLite代码优化建议(崩溃解决后)
虽然不是当前崩溃的原因,但你的SQLite代码存在SQL注入风险,建议修改:
- 删除操作:改用占位符替代字符串拼接:
public void delete_info(String firstname) { this.getWritableDatabase().delete("INFO","FIRSTNAME= ?", new String[]{firstname}); }
- 更新操作:同样用ContentValues和占位符实现:
public void update_info(String old_firstname, String new_firstname) { ContentValues values = new ContentValues(); values.put("FIRSTNAME", new_firstname); this.getWritableDatabase().update("INFO", values, "FIRSTNAME= ?", new String[]{old_firstname}); }
内容的提问来源于stack exchange,提问作者rk_1
相关产品推荐
相关产品推荐

