You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:35:42