【发布时间】:2010-11-17 21:22:25
【问题描述】:
我正在尝试按照以下示例在我的活动的 onSaveInstanceState(Bundle) 方法中保存一些值:Saving Android Activity state using Save Instance State
但它似乎没有从 Oncreate() 加载它。 bundle 对象始终为空,但每当我调用另一个活动时,它确实会进入 onSaveInstanceState 方法来保存我的值。
现在我阅读了我刚刚发布的那个问题,有人注意到他们如何无法让它在模拟器中工作?不幸的是,这就是我所做的一切。在模拟器上并且无法在设备上测试应用程序,因为我现在没有可用的设备而且我正在与之交互的 Web 服务位于我的工作机器上的本地 VM 中,目前无法远程访问。
我的问题是,保存的包真的不能在模拟器上运行吗?我还注意到当我关闭或启动一个新活动时,活动会调用 onPause,然后调用 onStop。当我带回相同的活动时,它会直接进入 onCreate?
现在根据这里的文档http://developer.android.com/guide/topics/fundamentals.html#actlife 就生命周期图显示的内容而言这是正确的,但是如果您在 onStop() 部分的该图下方阅读,它会说它进入的下一步是 onRestart() 或销毁()?没有提到onCreate?在文档上输入?
无论如何,我的 onSaveInstanceState() 和 onCreate() 都在同一个活动中:
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
Log.d(TAG, "SAVING OauthManager in onSaveInstanceState");
// TODO: if works, we need to save the my network list HashMap as well
// so we dont make a call to the platform everytime we refresh this
// screen
// savedInstanceState.putSerializable("oauthManager", mOathManager);
// Log.d(TAG, "finished saving");
// super.onSaveInstanceState(savedInstanceState);
// Log.d(TAG, "super.onSaveInstanceState(savedInstanceState)");
savedInstanceState.putString(USER_CONSUMER_ID,
mSavedUserConsumerTokenId);
savedInstanceState.putString(USER_CONSUMER_SECRET,
mSavedUserConsumerSecret);
savedInstanceState.putString(URL_REQUEST_TOKEN, mSavedRequestTokenUrl);
savedInstanceState.putString(URL_ACCESS_TOKEN, mSavedAccessTokenUrl);
savedInstanceState.putString(URL_AUTHORIZE_TOKEN,
mSavedAuthorizeTokenUrl);
super.onSaveInstanceState(savedInstanceState);
}
我的 onCreate
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
Log.d(TAG, " ");
Log.d(TAG, "onCreate");
Log.d(TAG, "///////////////////////////////////////");
Log.d(TAG, "///////////////////////////////////////");
super.onCreate(savedInstanceState);
Log.d(TAG, "super.onCreate(savedInstanceState);");
setContentView(R.layout.network_list);
mContext = getApplicationContext();
mIntent = getIntent();
mGoogleButton = (Button) findViewById(R.id.googleAddOrRemoveButton);
mFacebookButton = (Button) findViewById(R.id.facebookAddOrRemoveButton);
mLinkedInkButton = (Button) findViewById(R.id.linkedInAddOrRemoveButton);
mPopEmailButton = (Button) findViewById(R.id.popEmailAddOrRemoveButton);
if (savedInstanceState != null) {
Log.d(TAG, "inside if (savedInstanceState != null) {");
Log.d(TAG, "savedInstanceState != null");
// mOathManager = (OAuthManager) savedInstanceState
// .getSerializable("oauthManager");
mSavedUserConsumerTokenId = savedInstanceState
.getString(USER_CONSUMER_ID);
mSavedUserConsumerSecret = savedInstanceState
.getString(USER_CONSUMER_SECRET);
mSavedRequestTokenUrl = savedInstanceState
.getString(URL_REQUEST_TOKEN);
mSavedAccessTokenUrl = savedInstanceState
.getString(URL_ACCESS_TOKEN);
mSavedAuthorizeTokenUrl = savedInstanceState
.getString(URL_AUTHORIZE_TOKEN);
mOathManager = new OAuthManager(mContext, getIntent(),
mSavedUserConsumerTokenId, mSavedUserConsumerSecret,
mSavedRequestTokenUrl, mSavedAccessTokenUrl,
mSavedAuthorizeTokenUrl, CALLBACK_URI);
mOathManager.requestUserRequestToken();
} else{
Log.d(TAG, "savedInstanceState is null and loading the list again");
GetNetworkListTask getNetworkListTask = new GetNetworkListTask();
getNetworkListTask.execute();
}
}
【问题讨论】:
-
嗨,你能解决这个问题吗?我在摩托罗拉里程碑手机上遇到过这个问题(我尝试过的模拟器和其他几部手机似乎没有保存但未恢复 InstanceState 的问题)
标签: android