Java Android:如何保存数据(意图和数据)

Java Android:如何保存数据(意图和数据),java,android,android-intent,android-activity,android-studio,Java,Android,Android Intent,Android Activity,Android Studio,下面有一个示例代码,它通过在三个活动代码下面使用Intent来传递数据 活动A public class A extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_A); } public void onButto

下面有一个示例代码,它通过在三个活动代码下面使用Intent来传递数据

活动A

public class A extends AppCompatActivity {

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

public void onButton1Clicked(View v) {
    Intent intent = new Intent(getApplicationContext(), B.class);
    startActivity(intent);
}
活动B

public class B extends AppCompatActivity {

TextView tv;
ImageButton ib;

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

    tv = (TextView) findViewById(R.id.textView);
    ib = (ImageButton) findViewById(R.id.imageButton);
    ib.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            Intent intent = new Intent(B.this, C.class);
            startActivityForResult(intent, 2);
        }
    });

}

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == 2) {
        if (data != null) {
            String message = data.getStringExtra("DATA");
            tv.setText(message);
        }
    }
}

public void onButton2Clicked(View v) {
    Intent intent = new Intent(getApplicationContext(), C.class);
    startActivity(intent);
}
活动C

public class C extends AppCompatActivity {

EditText et;
Button btn;


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

    et = (EditText) findViewById(R.id.editText);
    btn = (Button) findViewById(R.id.button);
    btn.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            String data = et.getText().toString();
            Intent intent = new Intent();
            intent.putExtra("DATA", data);
            setResult(2, intent);
            finish();
        }
    });
}
活动顺序为A-B-C

在A中,有一个按钮可以移动到B,在B中有一个按钮(可以移动到C)和文本视图。在C语言中,一个按钮(可以再次移动到B)和编辑文本

例如,使用“startActivityForResult”,我将输出为TextView(B),它接收到C中EditText输入的文本。但将B移到a(后面)后,再次输入B时,TextView的插入消失。此外,即使输入C,也不会插入EditText

我真的需要并且知道“保存代码”到变量中,当按下C中的按钮时,以编辑文本的形式输入

在这种情况下,如何添加“代码”以保留插入值?退出应用程序以保留插入值,或移动到接收数据的活动(如活动)以保留插入值


感谢您的合作和关注。

要保持活动状态,您必须重写
onSaveInstanceState
方法。在此方法中存储TextView和EditText的值。例如,让我们来讨论活动B。在活动B中,您将执行以下操作:

@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
    // Save the user's current game state
    String text = tv.getText().toString();
    savedInstanceState.putString("mytext", text);

    // Always call the superclass so it can save the view hierarchy state
    super.onSaveInstanceState(savedInstanceState);
}
然后在
onCreate
中执行以下操作:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState); // Always call the superclass first
   // Set Content View and initialize the views
    // Check whether we're recreating a previously destroyed instance
    if (savedInstanceState != null) {
        // Restore value of members from saved state
        String mytext = savedInstanceState.getString("mytext");
        tv.setText(mytext);
    } else {
        // Probably initialize members with default values for a new instance
    }
    ...
}

您可以阅读更多关于

的信息。您可以使用以下方式存储intent的数据。。 您的示例似乎混淆了如何传递数据,并且在ActivityB中有两种方法处理意图。(onButtonClicked和StartActivityForResult())

下面是一个简单的例子

定义唯一字符串以保存您的意图数据 -活动a

public final static String EXTRA_MESSAGE ="myMessage";
下面的方法将打开显示您在编辑文本视图中键入的消息的
ShowMessage
活动

 public void sendMessage(){
 Intent intent = new Intent(this, ShowMessage.class);
    EditText editText = (EditText) findViewById(R.id.edit_message);
    String message = editText.getText().toString();
    intent.putExtra(EXTRA_MESSAGE, message);
    startActivity(intent);
}
以下是如何在
ShowMessage
活动中检索该数据。 -活动b

Intent intent = getIntent();
    String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);
 //EXTRA_MESSAGE is a unique string that holds the message typed in TextView
  TextView receiveMessage = findViewById(R.id.sentMessage);
  receiveMessage.setText(message); //would set the message typed in ActivityA
现在,当您返回时,如果您仍然希望您的EditText输入上一个字符串,您可以按照Eric B给出的答案执行

//Saving the value
@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);

    String myMessage = editText.getText().toString();
    outState.putString("myMessage", myMessage);

}
在onCreate()中,可以按如下方式检索

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

   if (savedInstanceState != null){

        String myMessage = savedInstanceState.getString("myMessage","");
        editText.setText(myMessage);
    }
另外,建议使用
resultCode==RESULT\u OK
验证意图

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);

if (requestCode == 2 && resultCode == RESULT_OK) {
    if (data != null) {
        String message = data.getStringExtra("DATA");
        tv.setText(message);
    }
}

好。。。。。我开始感觉到了。我想再问你一个问题。你能告诉我如何编辑我的代码吗?打开你的活动课,阅读我的答案中提供的指南,按照它要求你做的去做。