当前位置: 首页 > web >正文

android app 一个 crash的解决过程!

一、日志:
crash
2024-10-25 12:15:33.020  2113-2113  AndroidRuntime          pid-2113                             E  FATAL EXCEPTION: main
Process: com..workhome, PID: 2113
java.lang.RuntimeException: Unable to start activity ComponentInfo{com..workhome/com.workhome.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'androidx.lifecycle.LiveData com.kingtop.workhome.room.AppRepository.getAllApps()' on a null object reference
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3484)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3648)
    at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)
    at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
    at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2116)
    at android.os.Handler.dispatchMessage(Handler.java:106)
    at android.os.Looper.loop(Looper.java:223)
    at android.app.ActivityThread.main(ActivityThread.java:7723)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:612)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:997)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'androidx.lifecycle.LiveData com.workhome.room.AppRepository.getAllApps()' on a null object reference
    at com.workhome.MainActivity.setData(MainActivity.java:528)
    at com.workhome.MainActivity.onCreate(MainActivity.java:457)
    at android.app.Activity.performCreate(Activity.java:8000)
    at android.app.Activity.performCreate(Activity.java:7984)    
中文回复,难道mAppRepository 这个为空?
是因为private void initRoom() {
        Log.d(TAG, "initRoom: Starting");
        new Thread(() -> {
            AppDatabase db = AppDatabase.getInstance(this);
            AppInfoDao dao = db.appInfoDao();
            mAppRepository = new AppRepository(dao);
            runOnUiThread(() -> Log.d(TAG, "initRoom: Room database initialized"));
        }).start();
        Log.d(TAG, "initRoom: Thread started");
    }

二、提问:开了一个线程在初始化,就是还没初始化完成,就立马调用mAppRepository导致?

三、解决办法:可以把 setData() 的调用移动到初始化完成的回调中(UI线程)
     private void initRoom() {
        Log.d(TAG, "initRoom: Starting");
        new Thread(() -> {
            AppDatabase db = AppDatabase.getInstance(this);
            AppInfoDao dao = db.appInfoDao();
            mAppRepository = new AppRepository(dao);
//            runOnUiThread(() -> Log.d(TAG, "initRoom: Room database initialized"));

            runOnUiThread(() -> {
                Log.d(TAG, "initRoom: Room database initialized");
                setData(); // ← 初始化完成后再调用
            });

        }).start();
        Log.d(TAG, "initRoom: Thread started");
    }
 

http://www.xdnf.cn/news/12527.html

相关文章:

  • count() + case when统计问题
  • Next.js+prisma开发二
  • 【LLMs篇】14:扩散语言模型的理论优势与局限性
  • H_Prj06 8088单板机的串口
  • 贝叶斯网络_TomatoSCI分析日记
  • vanna+deepseek+chainlit 实现自然语言转SQL的精度调优
  • 一种全新的非对称加密算法
  • 豪斯多夫距离 (Hausdorff Distance)在机器人轨迹规划中的应用
  • Kubernetes指标实现有效的集群监控和优化
  • 免费批量图片格式转换工具
  • usbutils工具的使用帮助
  • 【时时三省】(C语言基础)局部变量和全局变量
  • CSDN文章下载到本地的完整指南
  • 88.实现查看收藏功能的前端实现
  • 43道Java多线程高频题整理(附答案背诵版)
  • [蓝桥杯]解谜游戏
  • Tongweb配置跳过扫描应用jar的配置指引(by lqw)
  • 大模型如何革新用户价值、内容匹配与ROI预估
  • C语言字符数组初始化的5种方法(附带实例)
  • 鲲鹏麒麟服务器自制Nacos镜像并部署
  • Linux系统:ELF文件的定义与加载以及动静态链接
  • C++——红黑树
  • 三类 Telegram 账号的风控差异分析与使用建议
  • GWO-LSSVM-Adaboost灰狼算法GWO优化最小二乘支持向量机LSSVM分类预测!
  • python fbx sdk
  • 更新雅可比矩阵的非线性部分笔记
  • 和芯 SL6341 (内置FLASH) 国产USB 3.0HUB芯片 替代 GL3510 VL817
  • 区块链技术相关
  • mybatis中判断等于字符串的条件怎么写
  • ingress-nginx 开启 Prometheus 监控 + Grafana 查看指标