Java Android:onActivityResult()本地数据丢失

Java Android:onActivityResult()本地数据丢失,java,android,android-activity,start-activity,Java,Android,Android Activity,Start Activity,我有两项活动(活动1和活动2)。Activity1启动Activity2以获取一些数据。每当我返回Activity1 onCreate方法时,onActivityResult()之前运行onCreate方法,并且所有数据都消失了。为什么onCreate方法再次运行,而数据丢失 您可以查看下面的示例代码以查看示例场景。在这种情况下,onActivityResult方法中的var1值应为5,但其值为0 public class MainActivity1 extends ActionBarActiv

我有两项活动(活动1和活动2)。Activity1启动Activity2以获取一些数据。每当我返回Activity1 onCreate方法时,onActivityResult()之前运行onCreate方法,并且所有数据都消失了。为什么onCreate方法再次运行,而数据丢失

您可以查看下面的示例代码以查看示例场景。在这种情况下,onActivityResult方法中的var1值应为5,但其值为0

public class MainActivity1 extends ActionBarActivity 
{
    TextView textView1;
    Button button1;
    int var1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main_activity1);

        textView1 = (TextView) findViewById(R.id.textView1);
        button1 = (Button) findViewById(R.id.button1);

        button1.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View arg0) {
                var1 = 5;
                Intent intent = new Intent(MainActivity1.this, MainActivity2.class);
                startActivityForResult(intent, 2);// Activity is started with requestCode 2
            }
        });
    }

    // Call Back method  to get the Message form other Activity
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if (requestCode == 2) {
            String message = data.getStringExtra("MESSAGE");
            textView1.setText("value =" + var1);

        }
    }

}


public class MainActivity2 extends ActionBarActivity {

    EditText editText1;
    Button button1;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main_activity2);

        editText1=(EditText)findViewById(R.id.editText1);
        button1=(Button)findViewById(R.id.button1);

        button1.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View arg0) {
                String message=editText1.getText().toString();
                Intent intent=new Intent();
                intent.putExtra("MESSAGE",message);

                setResult(2,intent);

                finish();//finishing activity
            }
        });
    }

}

在“设置>开发人员选项”中有一个名为“不保留活动”的设置。确保未启用此功能,否则一旦启动第二个活动,该活动就会被销毁,并且在返回第一个活动时会重新创建该活动。

您做错了。您正在意向中保存一个字符串。 然后在
onActivityResult
方法中,从intent中检索字符串,然后将TextView的文本设置为
“value=“var1
,但没有从intent中加载
var1


您应该将值
var1
保存在
main activity2
的intent中,然后从
onActivityResult
方法的intent中检索它。

@user3269905在后台,第一个活动可能会被Android操作系统破坏,在这种情况下,您将再次面临这个问题。你应该更好地实现你的方法的逻辑。。。做一个简单的检查:开始第二个活动,改变手机的方向,回到第一个活动。。。这不是解决办法是的,他应该这么做。但请给出更好的指示。拯救使用putExtra<代码>意图=新意图()?最好使用getIntent(),否则var将不存在。感谢您的回复!你的意思是说我不应该在参加活动时留下数据,我应该随身携带,回来时应该带回。我做对了吗?即使有很多数据,这是最好的做法吗@Pierfrancesco Soffritino,逻辑步骤是:1。为结果2启动一项活动。在本活动3中执行一些操作。将这些操作的结果保存在intent(使用putExtra())4中。完成活动5。在第一个活动的onActivityResult方法中,获取保存在intent中的结果