2014-08-28 83 views
1

我在我的fragment1上有一個getSharedPreferences,它將從前一個片段中加載int。getSharedPreferences在fragment方法上返回nullpointerexception

public void backButtonWasPressed() { 
    settings = getActivity().getSharedPreferences("MyPref", 0); 
    ..... 
} 

我打電話fragment1.backButtonWasPressed(),並給我迫使靠近和錯誤消息的NullPointerException 「設置= getActivity()getSharedPreferences。(」 MyPref 「0);」

我的logcat:

08-28 16:52:21.828: E/AndroidRuntime(4412): FATAL EXCEPTION: main 
08-28 16:52:21.828: E/AndroidRuntime(4412): java.lang.NullPointerException 
08-28 16:52:21.828: E/AndroidRuntime(4412):  at pkh.apps.Fragment1.backButtonWasPressed(Fragment1.java:324) 
08-28 16:52:21.828: E/AndroidRuntime(4412):  at pkh.apps.KajianUtama.onBackPressed(KajianUtama.java:71) 
08-28 16:52:21.828: E/AndroidRuntime(4412):  at android.app.Activity.onKeyUp(Activity.java:2131) 

324行上片段1是:設置= getActivity()getSharedPreferences( 「MyPref」,0);

我的主要SherlockFragmentActivity:

public class KajianUtama extends SherlockFragmentActivity implements OnItemClickListener { 
.... 
@Override 
public void onBackPressed() { 
    super.onBackPressed(); 
    FragmentManager fm = getSupportFragmentManager(); 
    fragment1 = (Fragment1) fm.findFragmentById(R.id.content_frame); 
    fragment1.backButtonWasPressed(); 
} 
..... 

}

我的片段1:

public class Fragment1 extends SherlockFragment{ 
.... 
    public void backButtonWasPressed() { 
    settings = getActivity().getSharedPreferences("MyPref", 0); 
    c = settings.getInt("numRun",0); 
    Log.d("back pressed", "c " + c); 
    } 
... 
} 

請給我一個解決方案來解決這個問題。謝謝。

+0

如果它加載一個字符串,那麼爲什麼默認值爲0 ?應該是'''''或'null'。 – Simas 2014-08-28 09:32:18

+0

對不起,我的意思是int,我已經編輯了我的問題 – wdyz 2014-08-28 09:33:41

+0

可以發表日誌,說明行號和突出顯示行號嗎? – KOTIOS 2014-08-28 09:39:09

回答

2

檢查您的首選項的名稱是否與您用來保存它的名稱相同,最佳做法是保存常量PREFERENCE_NAME="myPreferenceName",然後使用該常數而不是字符串。

編輯

嘗試以這種方式

@Override 
public void onBackPressed() { 
    super.onBackPressed(); 
    FragmentManager fm = getSupportFragmentManager(); 
    fragment1 = (Fragment1) fm.findFragmentById(R.id.content_frame); 
    fragment1.backButtonWasPressed(this); 
} 

然後

public void backButtonWasPressed(Context context) { 
    settings = context.getSharedPreferences("MyPref", 0); 
    c = settings.getInt("numRun",0); 
    Log.d("back pressed", "c " + c); 
} 

傳遞上下文的方法

+0

我檢查並交叉檢查名稱,我確定它是正確的名稱。 – wdyz 2014-08-28 10:05:55

+0

那樣給我一個錯誤:「類型KajianUtama的方法getActivity()未定義」。 KajianUtama是SherlockFragmentActivity,而不是Fragment – wdyz 2014-08-28 10:14:30

+0

你的解決方案是工作,我的sharedPreferences不再返回null:D謝謝。 – wdyz 2014-08-28 10:31:10

相關問題