-1

我有以下代码:共享偏好零指示字例外

public void refresh(){ 
     View rootView=getView(); 
     final SharedPreferences pref = this.getContext().getSharedPreferences("MyFav", 0); 
     final SharedPreferences.Editor editor = pref.edit(); 
     Map<String,?> entries = pref.getAll(); 
     final Set<String> keys = entries.keySet();} 

此函数是一个片段内,我从活动如下调用它: -

public void onBackPressed() { 
     super.onBackPressed(); 
     FavLegislator fav =new FavLegislator(); 
     if(frag.equals("true")) 
      fav.refresh(); 
     finish(); 
    } 

共享偏好在活动中可能已更改。
我只想在活动关闭时更新首选项列表。

我收到以下错误上活动的后退按钮按下:

11-27 10:06:24.126 31645-31645/com.app.congress.congressapp E/AndroidRuntime: FATAL EXCEPTION: main 
Process: com.app.congress.congressapp, PID: 31645 
java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.SharedPreferences android.content.Context.getSharedPreferences(java.lang.String, int)' on a null object reference 
    at com.app.congress.congressapp.FavLegislator.refresh(FavLegislator.java:85) 
    at com.app.congress.congressapp.legislator_info.onBackPressed(legislator_info.java:466) 
    at com.app.congress.congressapp.legislator_info.onOptionsItemSelected(legislator_info.java:454) 
    at android.app.Activity.onMenuItemSelected(Activity.java:2912) 
    at android.support.v4.app.FragmentActivity.onMenuItemSelected(FragmentActivity.java:361) 
    at android.support.v7.app.AppCompatActivity.onMenuItemSelected(AppCompatActivity.java:147) 
    at android.support.v7.view.WindowCallbackWrapper.onMenuItemSelected(WindowCallbackWrapper.java:100) 
    at android.support.v7.view.WindowCallbackWrapper.onMenuItemSelected(WindowCallbackWrapper.java:100) 
    at android.support.v7.widget.ToolbarWidgetWrapper$1.onClick(ToolbarWidgetWrapper.java:194) 
    at android.view.View.performClick(View.java:5201) 
    at android.view.View$PerformClick.run(View.java:21163) 
    at android.os.Handler.handleCallback(Handler.java:746) 
    at android.os.Handler.dispatchMessage(Handler.java:95) 
    at android.os.Looper.loop(Looper.java:148) 
    at android.app.ActivityThread.main(ActivityThread.java:5443) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 

能有人请让我知道为什么我收到上述错误,以及如何解决它?

回答

1

super.onBackPressed();通话将破坏/完成你的活动,你可以不再使用任何对象都属于这个活动,这样简单地结束移动这个电话,也没有必要调用finish()

public void onBackPressed() { 
     FavLegislator fav =new FavLegislator(); 
     if(frag.equals("true")) 
      fav.refresh(); 
     super.onBackPressed(); 
    } 

改变这个

final SharedPreferences pref = this.getContext().getSharedPreferences("MyFav", 0); 

这个

final SharedPreferences pref = getActivity().getSharedPreferences("MyFav", 0); 

注:更好的选择是创建一个静态方法,这将节省您的喜好数据的公用事业类,所以只是通过上下文和数据,以实用类,它从你的活动保存到偏好

public class Util { 

    public static void saveData(Context context,int i){ 
     // your preference code , change parameters accordingly 
    } 
} 

这样称呼它

Util.saveData(this,5); 
+0

仍然得到同样的错误 – Anirban

+0

@Anirban尝试更新,你应该使用'getActivity()'函数来检索附加活动的上下文 –

1

您不能拨打new FavLegislator(),并期望它有一个上下文。

这似乎是一个活动或片段类。当你制作一个new时,上下文没有附加,所以getContext()返回null。

如果你想,当你回到它刷新一些其他的视图中,使用onResume方法