2016-01-17 95 views
0

我想從對話框中加載一些SharedPreferences數據(複選框狀態)。我有以下代碼:從對話框訪問SharedPreferences CheckBox

@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.proficiency_dialog, null); 
     getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE); 
     updateProficiency = (Button) view.findViewById(R.id.update_proficiency); 
     updateProficiency.setOnClickListener(this); 
     cancelProficiency = (Button) view.findViewById(R.id.cancel_proficiency); 
     cancelProficiency.setOnClickListener(this); 
     STR_Prof_checkbox = (CheckBox) getDialog().findViewById(R.id.STR_save_checkbox); 
     loadSavedPreferences(); 
     setCancelable(false); 
     return view; 
    } 

    public void loadSavedPreferences() { 
     SharedPreferences sharedPreferences = PreferenceManager 
       .getDefaultSharedPreferences(getContext()); 
     boolean STRProfCheckBoxValue = sharedPreferences.getBoolean("STR_Save_CheckBox_Value", false); 
     if (STRProfCheckBoxValue) { 
      STR_Prof_checkbox.setChecked(true); 
     } else { 
      STR_Prof_checkbox.setChecked(false); 
     } 
    } 

但是,我在loadSavedPreferences()方法上收到空指針異常。我錯過了什麼導致錯誤?

的logcat:

01-18 01:51:55.273 26730-26730/com.oozhangem.dd5echaracter E/AndroidRuntime: FATAL EXCEPTION: main 
Process: com.oozhangem.dd5echaracter, PID: 26730 
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.CheckBox.setChecked(boolean)' on a null object reference 
    at com.oozhangem.dd5echaracter.ProficiencyDialog.loadSavedPreferences(ProficiencyDialog.java:47) 
    at com.oozhangem.dd5echaracter.ProficiencyDialog.onCreateView(ProficiencyDialog.java:35) 
    at android.support.v4.app.Fragment.performCreateView(Fragment.java:1962) 
    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1067) 
    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1248) 
    at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:738) 
    at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1613) 
    at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:517) 
    at android.os.Handler.handleCallback(Handler.java:739) 
    at android.os.Handler.dispatchMessage(Handler.java:95) 
    at android.os.Looper.loop(Looper.java:135) 
    at android.app.ActivityThread.main(ActivityThread.java:5294) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:372) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:904) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:699) 
+1

請發佈您的logcat錯誤輸出。 – Rohit5k2

+0

是的,logcat將是有用的。 但我認爲getContext()爲空。您可以從容器中獲取上下文。 關閉頂部:不要使用帶有空白的充氣器。使用主持人對象作爲參數。 – Puzirki

+0

增加了logcat,@Puzirki,你能解釋一下使用容器對象作爲參數嗎? –

回答

0

更換

SharedPreferences sharedPreferences = PreferenceManager 
       .getDefaultSharedPreferences(getContext()); 

隨着

SharedPreferences preferences = this.getActivity().getSharedPreferences("pref", Context.MODE_PRIVATE); 

或者

SharedPreferences pref = getActivity().getPreferences(0); 

阿爾斯o用以下代替STR_Prof_checkbox的參考。

STR_Prof_checkbox = (CheckBox) view.findViewById(R.id.STR_save_checkbox); 
+0

我有其他的活動,使用 'SharedPreferences sharedPreferences = PreferenceManager .getDefaultSharedPreferences(getContext());' 所以我會想象這不是問題? –

+0

'onCreateView'是不是'Activity'的'fragment'方法。 – Tauqir

+0

我的錯誤 - 我的意思是片段。我正在使用片段進行滑動視圖。 –