2012-06-23 62 views
0
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main2); 
    savedInstanceState.putString("foo", "bar"); 
} 

@Override 
public void onRestoreInstanceState(Bundle savedInstanceState) { 
    super.onRestoreInstanceState(savedInstanceState); 

    String myString = savedInstanceState.getString("foo"); 

    Log.i("debug", "saved data: " + myString); 
} 

我试着在活动中保留一些价值,但我收到以下错误:06-23 23:09:44.038: E/AndroidRuntime(17584): java.lang.RuntimeException: Unable to start activity ComponentInfo{se.johanberntsson.activitytest/se.johanberntsson.activitytest.TestActivity}: java.lang.NullPointerException获取savedInstanceState值,NullPointerException异常

我错过了什么吗?在savedInstanceState捆绑节约值作为感谢

+0

试井如果'savedInstanceState',看它是否是'之前调用null''的getString(...)'将是一个良好的开端。你如何努力“保留一些价值”?也许使用'SharedPreferences'可能是一个更好的选择。 – Squonk

回答

2

覆盖onSaveInstanceState

public String strfoo=""; 
     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.main2); 
      //comment this line you only fatch values from savedInstanceState 
      String myString = savedInstanceState.getString("foo"); 
      Log.i("debug", "saved data: " + myString); 
      // savedInstanceState.putString("foo", "bar"); 
      strfoo="bar"; set value here 
     } 

     @Override 
     public void onRestoreInstanceState(Bundle savedInstanceState) { 
      super.onRestoreInstanceState(savedInstanceState); 
      String myString = savedInstanceState.getString("foo"); 
      Log.i("debug", "saved data: " + myString); 
     } 

     @Override 

     public void onSaveInstanceState(Bundle savedInstanceState) { 
     savedInstanceState.putString("foo", strfoo); 
     super.onSaveInstanceState(savedInstanceState); 

     } 
+0

谢谢!但是,当我开始我的新活动 - >按“返回” - >再次启动相同的活动,我没有看到我的日志中的“酒吧”。当时不应该调用'onRestoreInstanceState'? – Johan

+0

onRestoreInstanceState仅在任何配置时调用。发生变化。 –

+0

但我想当你按下返回按钮onRestoreInstanceState和onSaveInstanceState没有调用。所以改变你的逻辑和使用sharedpreferce存储值,当用户按下按钮时,通过覆盖onKeyDown或onBackPressed –