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.pswp.cn/pingmian/84208.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/84208.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/84208.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

[Java 基礎]Object 類

java.lang.Object 是 Java 所有類的直接或間接父類,Java 中每個類都默認繼承 Object 類(即使你沒寫 extends Object)。 Object 中的常用方法: 方法名功能簡介toString()返回對象的字符串表示equals(Object)判斷兩個對象是否“邏…

大數據學習(135)-Linux系統性指令

🍋🍋大數據學習🍋🍋 🔥系列專欄: 👑哲學語錄: 用力所能及,改變世界。 💖如果覺得博主的文章還不錯的話,請點贊👍收藏??留言📝支持一…

【Fifty Project - D35】

今日完成記錄 TimePlan完成情況7:00 - 7:40爬坡√8:30 - 11:30Rabbit MQ√17:30 - 18:30羽毛球√ RabbitMQ 消費者端如何保證可靠性? 消息投遞過程出現網絡故障消費者接收到消息但是突然宕機…

P3 QT項目----記事本(3.4)

3.4 文件選擇對話框 QFileDialog 3.4.1 QFileDialog 開發流程 使用 QFileDialog 的基本步驟通常如下: 實例化 :首先,創建一個 QFileDialog 對象的實例。 QFileDialog qFileDialog;設置模式 :根據需要設置對話框的模式&…

學習筆記(26):線性代數-張量的降維求和,簡單示例

學習筆記(26):線性代數-張量的降維求和,簡單示例 1.先理解 “軸(Axis)” 的含義 張量的 “軸” 可以理解為 維度的方向索引 。對于形狀為 (2, 3, 4) 的張量,3 個軸的含義是: 軸 0(axis0&…

健康檔案實訓室:構建全周期健康管理的數據基石

一、健康檔案實訓室建設背景 隨著“健康中國2030”戰略深入推進,健康檔案作為居民健康數據的核心載體,在疾病預防、慢性病管理、醫療決策等領域的價值日益凸顯。在此背景下,健康檔案實訓室建設成為職業院校對接政策要求、培養專業健康管理…

【MATLAB第119期】基于MATLAB的KRR多輸入多輸出全局敏感性分析模型運用(無目標函數,考慮代理模型)

【MATLAB第119期】基于MATLAB的KRR多輸入多輸出全局敏感性分析模型運用(無目標函數,考慮代理模型) 下一期研究SHAP的多輸入多輸出敏感性分析方法 一、SOBOL(無目標函數) (1)針對簡單線性數據…

Linux常用文件目錄命令

瀏覽目錄命令: ls 、pwd目錄操作命令:cd、mkdir、rmdir瀏覽文件命令:cat、more、less、head、tail文件操作命令:cp、rm、mv、find、grep、tar 瀏覽目錄命令 ls ? 命令名稱:ls ? 命令英文原意:list ? …

PIN碼vs密碼,電腦登錄的快捷鍵你用對了嗎?

你是否也遇到過這樣的窘境:信心滿滿地輸入電腦開機密碼,屏幕卻無情地提示“密碼錯誤”。仔細一看,才發現登錄界面悄悄地變成了要求輸入“PIN碼”。這種因為混淆了PIN碼和賬戶密碼而導致的開機失敗,相信不少朋友都碰到過。 PIN碼作…

【大模型科普】AIGC技術發展與應用實踐(一文讀懂AIGC)

【作者主頁】Francek Chen 【專欄介紹】 ? ? ?人工智能與大模型應用 ? ? ? 人工智能(AI)通過算法模擬人類智能,利用機器學習、深度學習等技術驅動醫療、金融等領域的智能化。大模型是千億參數的深度神經網絡(如ChatGPT&…

Spring是如何解決Bean的循環依賴:三級緩存機制

1、什么是 Bean 的循環依賴 在 Spring框架中,Bean 的循環依賴是指多個 Bean 之間?互相持有對方引用?,形成閉環依賴關系的現象。 多個 Bean 的依賴關系構成環形鏈路,例如: 雙向依賴:Bean A 依賴 Bean B,同時 Bean B 也依賴 Bean A(A?B)。鏈條循環: Bean A → Bean…

XXE漏洞知識

目錄 1.XXE簡介與危害 XML概念 XML與HTML的區別 1.pom.xml 主要作用 2.web.xml 3.mybatis 2.XXE概念與危害 案例:文件讀取(需要Apache >5.4版本) 案例:內網探測(雞肋) 案例:執行命…

02-性能方案設計

需求分析與測試設計 根據具體的性能測試需求,確定測試類型,以及壓測的模塊(web/mysql/redis/系統整體)前期要與相關人員充分溝通,初步確定壓測方案及具體的性能指標QA完成性能測試設計后,需產出測試方案文檔發送郵件到項目組&…

STL優先級隊列的比較函數與大堆小堆的關系

STL中的priority_queue&#xff08;優先級隊列&#xff09;通過比較函數來確定元素的優先級順序&#xff0c;從而決定其內部是形成大堆還是小堆。以下是關鍵點總結&#xff1a; 默認行為與大堆&#xff1a; 默認情況下&#xff0c;priority_queue使用std::less<T>作為比較…

React---day11

14.4 react-redux第三方庫 提供connect、thunk之類的函數 以獲取一個banner數據為例子 store&#xff1a; 我們在使用異步的時候理應是要使用中間件的&#xff0c;但是configureStore 已經自動集成了 redux-thunk&#xff0c;注意action里面要返回函數 import { configureS…

OD 算法題 B卷【反轉每對括號間的子串】

文章目錄 反轉每對括號間的子串 反轉每對括號間的子串 給出一個字符串s&#xff0c; 僅含有小寫英文字母和英文括號’(’ ‘)’&#xff1b;按照從括號內到外的順序&#xff0c;逐層反轉每對括號中的字符串&#xff0c;并返回最終的結果&#xff1b;結果中不能包含任何括號&am…

如何做好一份技術文檔?從規劃到實踐的完整指南

如何做好一份技術文檔&#xff1f;從規劃到實踐的完整指南 &#x1f31f; 嗨&#xff0c;我是IRpickstars&#xff01; &#x1f30c; 總有一行代碼&#xff0c;能點亮萬千星辰。 &#x1f50d; 在技術的宇宙中&#xff0c;我愿做永不停歇的探索者。 ? 用代碼丈量世界&…

css的定位(position)詳解:相對定位 絕對定位 固定定位

在 CSS 中&#xff0c;元素的定位通過 position 屬性控制&#xff0c;共有 5 種定位模式&#xff1a;static&#xff08;靜態定位&#xff09;、relative&#xff08;相對定位&#xff09;、absolute&#xff08;絕對定位&#xff09;、fixed&#xff08;固定定位&#xff09;和…

詳細講解Flutter GetX的使用

Flutter GetX 框架詳解&#xff1a;狀態管理、路由與依賴注入 GetX 是 Flutter 生態中一款強大且輕量級的全功能框架&#xff0c;集成了狀態管理、路由管理和依賴注入三大核心功能。其設計理念是簡潔高效&#xff0c;通過最小的代碼實現最大的功能&#xff0c;特別適合快速開發…

【大模型:知識庫管理】--Dify接入RAGFlow 知識庫

ragflow的官方文檔&#xff1a; HTTP API 接口 |抹布流 --- HTTP API | RAGFlow 接著前文&#xff0c;我們已經創建了知識庫&#xff0c;那么如何才能使用它呢&#xff1f; 當然也是通過網絡API的形式去調用它。本文將講解兩種方式&#xff1a; Dify調用python源碼調用 目錄…