慕尼黑8549860
2023-03-17 10:19:11
在我的應(yīng)用程序中,我有一個(gè)用于顯示數(shù)據(jù)的片段,以及一個(gè)用于更改應(yīng)用程序中某些設(shè)置的設(shè)置活動(dòng)。當(dāng)我通過(guò)導(dǎo)航抽屜轉(zhuǎn)到設(shè)置活動(dòng),然后返回主屏幕(不更改設(shè)置)時(shí),應(yīng)用程序崩潰并出現(xiàn)以下異常:java.lang.IllegalStateException: Fragment NowWeatherFragment{b7914f8 (0e67ee0d-8776-45b5-9fd7-ee69841c31d1)} not attached to a context它似乎是在 API 調(diào)用響應(yīng)之后發(fā)生的,并且有一個(gè)關(guān)于 SO 的另一個(gè)答案的合理解釋,但我嘗試過(guò)的任何事情都無(wú)法解決這個(gè)問(wèn)題。我已經(jīng)看到了其他幾個(gè)與此相關(guān)的問(wèn)題,但我無(wú)法將這些問(wèn)題的答案應(yīng)用到我的情況中。我嘗試檢查 isAttached() 但這并沒(méi)有幫助,也對(duì)片段進(jìn)行了空檢查,但它仍然遇到相同的異常與其發(fā)布所有課程,有些課程很長(zhǎng),這里是 github 存儲(chǔ)庫(kù)。它應(yīng)該是相當(dāng)輕量級(jí)的,并且很容易通過(guò) Android Studio 在設(shè)備上運(yùn)行 https://github.com/jollygreenegiant/SimpleWeather我希望該應(yīng)用程序會(huì)返回主屏幕并像啟動(dòng)時(shí)那樣顯示天氣數(shù)據(jù)。java.lang.IllegalStateException: Fragment NowWeatherFragment{b7914f8 (0e67ee0d-8776-45b5-9fd7-ee69841c31d1)} not attached to a context. at androidx.fragment.app.Fragment.requireContext(Fragment.java:765) at androidx.fragment.app.Fragment.getResources(Fragment.java:829) at com.jggdevelopment.simpleweather.fragments.NowWeatherFragment.setupViews(NowWeatherFragment.java:82) at com.jggdevelopment.simpleweather.fragments.NowWeatherFragment$3.onSharedPreferenceChanged(NowWeatherFragment.java:152) at android.app.SharedPreferencesImpl$EditorImpl.notifyListeners(SharedPreferencesImpl.java:612) at android.app.SharedPreferencesImpl$EditorImpl.commit(SharedPreferencesImpl.java:598) at com.jggdevelopment.simpleweather.fragments.MasterFragment.updateConditions(MasterFragment.java:263) at com.jggdevelopment.simpleweather.services.WeatherAPIUtils$2.onResponse(WeatherAPIUtils.java:92) at retrofit2.DefaultCallAdapterFactory$ExecutorCallbackCall$1$1.run(DefaultCallAdapterFactory.java:83)
2 回答

MYYA
TA貢獻(xiàn)1868條經(jīng)驗(yàn) 獲得超4個(gè)贊
您需要調(diào)用unregisterOnSharedPreferenceChangeListener()
您的onDestroyView()
(的鏡像onCreateView()
,這是您注冊(cè)偵聽(tīng)器的地方)。
就像現(xiàn)在一樣,您正在泄漏您的 Fragment,因?yàn)樗?code>SharedPreferences持有對(duì)您的偵聽(tīng)器的強(qiáng)烈引用,onSharedPreferenceChanged
在您的 Fragment 的視圖被銷毀后繼續(xù)將回調(diào)發(fā)送到它的井,導(dǎo)致您收到錯(cuò)誤消息。

有只小跳蛙
TA貢獻(xiàn)1824條經(jīng)驗(yàn) 獲得超8個(gè)贊
Fragment生命周期過(guò)于繁雜
Activity myactivity = getActivity();
if (isAdded() && myactivity != null) {
...
}
添加回答
舉報(bào)
0/150
提交
取消