Java Android:如何保存数据(意图和数据)
下面有一个示例代码,它通过在三个活动代码下面使用Intent来传递数据 活动AJava 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
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);
}
}
好。。。。。我开始感觉到了。我想再问你一个问题。你能告诉我如何编辑我的代码吗?打开你的活动课,阅读我的答案中提供的指南,按照它要求你做的去做。