安卓:保存和活动之间进行切换时恢复数据 [英] Android: Saving and Restoring data when switching between Activities

查看:184
本文介绍了安卓:保存和活动之间进行切换时恢复数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想保存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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆