我有以下功能:新的意圖(語境,類)拋出NullPointerException異常
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String s) {
if (s.equals("service_enabled")) {
boolean shouldStart = sharedPreferences.getBoolean(s, false);
Intent intent = new Intent(getActivity(), HUD.class);
if (shouldStart) { // Turn on
getActivity().startService(intent);
} else { // Turn off
getActivity().stopService(intent);
}
}
}
時,換做是我的PreferenceFragment
的函數被調用。服務Hud
(可能)正在運行,如果shouldStart == false
,然後我想停止它。如果您只需單擊該選項兩次,此功能按預期工作;服務啓動並停止。但是,如果你開始吧,回到以前的activity
,再次進入這個fragment
,並嘗試禁用它,下面happends:
01-25 22:22:44.848 32548-32548/net.hath.drawcut E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.NullPointerException
at android.content.ComponentName.<init>(ComponentName.java:75)
at android.content.Intent.<init>(Intent.java:3558)
at net.hath.drawcut.ui.fragment.PrefsFragment.onSharedPreferenceChanged(PrefsFragment.java:35)
at android.app.SharedPreferencesImpl$EditorImpl.notifyListeners(SharedPreferencesImpl.java:475)
at android.app.SharedPreferencesImpl$EditorImpl.apply(SharedPreferencesImpl.java:385)
at android.preference.Preference.tryCommit(Preference.java:1349)
at android.preference.Preference.persistBoolean(Preference.java:1615)
at android.preference.TwoStatePreference.setChecked(TwoStatePreference.java:83)
at android.preference.TwoStatePreference.onClick(TwoStatePreference.java:69)
at android.preference.Preference.performClick(Preference.java:949)
at android.preference.PreferenceScreen.onItemClick(PreferenceScreen.java:215)
at android.widget.AdapterView.performItemClick(AdapterView.java:298)
at android.widget.AbsListView.performItemClick(AbsListView.java:1100)
at android.widget.AbsListView$PerformClick.run(AbsListView.java:2749)
at android.widget.AbsListView$1.run(AbsListView.java:3423)
at android.os.Handler.handleCallback(Handler.java:725)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5227)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:562)
at dalvik.system.NativeStart.main(Native Method)
35號線是Intent intent = new Intent(getActivity(), HUD.class);
。
這裏發生了什麼?
請上傳整個堆棧跟蹤 – Emmanuel
您提到HUD是一項服務,35行是您開始服務的方式嗎?由於某種原因,getActivity()很可能是空的,在這種情況下,啓動服務可以像 那樣完成Intent intent = new Intent(「com.demo.service.ServiceClass」); this.startService(intent); – Ryan
這可能是,但這是在一個片段,這意味着我沒有start-或stopService方法;我需要使用'getActivity()'。但是,如果'getActivity()'突然返回'null',這不是很奇怪,只是因爲服務已經啓動了嗎? – MartinHaTh