安卓:保存和活动之间进行切换时恢复数据 [英] Android: Saving and Restoring data when switching between Activities
问题描述
我想保存MainActivity一些数据切换到另一个活动时,并恢复这些数据,我切换回吧。
在MainActivity(数据恢复)
保护无效的onCreate(捆绑savedInstanceState){
//做平常的东西
restoreData();
}
在MainActivity(切换到StatusActivity):
捆绑数据= SAVEDATA();
Log.d(TAG,将数据发送到活动状态的意图:+数据);
意向意图=新意图(getApplicationContext(),StatusActivity.class);
intent.putExtras(数据);
startActivity(意向);
在StatusActivity
捆绑数据= getIntent()getExtras()。
Log.d(TAG,将数据发送到主要活动的意图:+数据);
意向意图=新意图(getApplicationContext(),MainActivity.class);
intent.putExtras(数据);
startActivity(意向);
我SAVEDATA()函数:
私人捆绑SAVEDATA(){
Log.d(TAG,启动节能状态);
捆绑数据=新包(); //商店的东西在包
返回的数据;
}
我restoreData()函数:
私人无效restoreData(){
Log.d(TAG,启动恢复状态); 捆绑数据= getIntent()getExtras()。
//在包还原的东西
}
LogCat中:
发送给StatusActivity时,我的包是好的:
将数据发送到活动状态的意图:
捆绑[{obj0 =包[{timeSinceLastPooped = 3224,饥饿= 5,
ID = 2130837505,timeSinceLastHungerUpdate = 3224,
timeSinceLastFed = 0,timeSinceLastHappinessUpdate = 3224,
timeSinceLastEvolution = 3224,铭文= 0.0,POSX = 0.0,
isDead =假,幸福= 5,evolutionStage = 0,键入=宠物}],
时间= 7.794168E7}]
但随后发回MainActivity:
将数据发送到活动的主要意图:捆绑[mParcelledData.dataSize = 648]
什么我做mParcelledData拿到原包回来?谢谢!
答:
在MainActivity(数据恢复)
@覆盖
保护无效的onActivityResult(INT申请code,INT结果code,意图意图){
如果(要求code == 1){
如果(结果code == RESULT_OK){
restoreData(意向);
}
}
}
在MainActivity(切换到StatusActivity):
捆绑数据= SAVEDATA();
Log.d(TAG,将数据发送到活动状态的意图:+数据);
意向意图=新意图(getApplicationContext(),StatusActivity.class);
intent.putExtras(数据);
startActivityForResult(意向,1);
在StatusActivity
捆绑数据= getIntent()getExtras()。
Log.d(TAG,将数据发送到主要活动的意图:+数据);
意向意图=新意图(getApplicationContext(),MainActivity.class);
intent.putExtras(数据);
的setResult(RESULT_OK,getIntent());
完();
您可以使用onRestoreInstanceState()女巫在onStart(称为后),而的onCreate()被调用onStart()。之前调用
使用看跌期权的方法来储存的onSaveInstanceState中的()值:
保护无效的onSaveInstanceState(束束){
super.onSaveInstanceState(包);
bundle.putInt(价值,价值);
}
而在OnCreate()中恢复值:
公共无效的onCreate(捆绑包){
如果(捆绑!= NULL){
值= bundle.getInt(值);
}
}
I am trying to save some data in "MainActivity" when switching to another activity, and restoring that data as I switch back to it.
In "MainActivity": (restoring data)
protected void onCreate(Bundle savedInstanceState) {
// do usual stuff
restoreData();
}
In "MainActivity": (switching to "StatusActivity"):
Bundle data = saveData();
Log.d(TAG, "Sending data to status activity intent: " +data);
Intent intent = new Intent(getApplicationContext(), StatusActivity.class);
intent.putExtras(data);
startActivity(intent);
In "StatusActivity":
Bundle data = getIntent().getExtras();
Log.d(TAG, "Sending data to main activity intent: " +data);
Intent intent = new Intent(getApplicationContext(), MainActivity.class);
intent.putExtras(data);
startActivity(intent);
My saveData() function:
private Bundle saveData() {
Log.d(TAG, "Started saving state");
Bundle data = new Bundle();
// store stuff in the bundle
return data;
}
My restoreData() function:
private void restoreData() {
Log.d(TAG, "Started restoring state");
Bundle data = getIntent().getExtras();
// restore stuff in the bundle
}
LogCat:
My bundle is fine when sending to StatusActivity:
Sending data to status activity intent:
Bundle[{obj0=Bundle[{timeSinceLastPooped=3224, hunger=5,
id=2130837505, timeSinceLastHungerUpdate=3224,
timeSinceLastFed=0, timeSinceLastHappinessUpdate=3224,
timeSinceLastEvolution=3224, posY=0.0, posX=0.0,
isDead=false, happiness=5, evolutionStage=0, type=pet}],
time=7.794168E7}]
But then sending back to MainActivity:
Sending data to main activity intent: Bundle[mParcelledData.dataSize=648]
What do I do with mParcelledData to get the original bundle back? Thanks!
Answer:
In "MainActivity": (restoring data)
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
if(requestCode == 1) {
if(resultCode == RESULT_OK) {
restoreData(intent);
}
}
}
In "MainActivity": (switching to "StatusActivity"):
Bundle data = saveData();
Log.d(TAG, "Sending data to status activity intent: " +data);
Intent intent = new Intent(getApplicationContext(), StatusActivity.class);
intent.putExtras(data);
startActivityForResult(intent, 1);
In "StatusActivity":
Bundle data = getIntent().getExtras();
Log.d(TAG, "Sending data to main activity intent: " +data);
Intent intent = new Intent(getApplicationContext(), MainActivity.class);
intent.putExtras(data);
setResult(RESULT_OK, getIntent());
finish();
You can use onRestoreInstanceState() witch is called after onStart(), whereas onCreate() is called before onStart().
Use the put methods to store values in onSaveInstanceState():
protected void onSaveInstanceState(Bundle bundle) {
super.onSaveInstanceState(bundle);
bundle.putInt("value", value);
}
And restore the value in onCreate():
public void onCreate(Bundle bundle) {
if (bundle!= null){
value = bundle.getInt("value");
}
}
这篇关于安卓:保存和活动之间进行切换时恢复数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!