问题是无法从TextView获取数据(已解决--Oleg Golomoz的答案)
问题是无法从TextView获取数据(已解决--Oleg Golomoz的答案)
嗨,我在我的应用中有两个活动,我想从第一个活动中获取数据并将其插入到第二个活动中。\n图片:\n我有两个日期选择器,用于选择日期范围,并将其保存在textView和textView2中。\n代码:MainActivity\nselectDate =(Button)findViewById(R.id.button);\ndate =(TextView)findViewById(R.id.textView);\nselectDate2 =(Button)findViewById(R.id.button2);\ndate2 =(TextView)findViewById(R.id.textView2);\nselectDate.setOnClickListener(新的View.OnClickListener(){\n@Override\npublic void onClick(View view){\ncalendar = Calendar.getInstance();\nyear = calendar.get(Calendar.YEAR);\nmonth = calendar.get(Calendar.MONTH);\ndayOfMonth = calendar.get(Calendar.DAY_OF_MONTH);\ndatePickerDialog = new DatePickerDialog(MainActivity.this,\n新的DatePickerDialog.OnDateSetListener(){\n@Override\npublic void onDateSet(DatePicker datePicker,int year,int month,int day){\ndate.setText(\"Entrada:\"+day + \"/\"+(month + 1)+ \"/\"+ year);\n}\n},year,month,dayOfMonth);\ndatePickerDialog.show();\n}\n});\nselectDate2.setOnClickListener(新的View.OnClickListener(){\n@Override\npublic void onClick(View view){\ncalendar2 = calendar2.getInstance();\nyear2 = calendar2.get(Calendar.YEAR);\nmonth2 = calendar2.get(Calendar.MONTH);\ndayOfMonth2 = calendar2.get(Calendar.DAY_OF_MONTH);\ndatePickerDialog2 = new DatePickerDialog(MainActivity.this,\n新的DatePickerDialog.OnDateSetListener(){\n@Override\npublic void onDateSet(DatePicker datePicker,int year,int month,int day){\ndate2.setText(\"Salida:\"+day + \"/\"+(month + 1)+ \"/\"+ year);\n}\n},year2,month2,dayOfMonth2);\ndatePickerDialog2.show();\n}\n});\nActivity2:\npackage com.example.mand.consumirapirest;\nimport android.support.v7.app.AppCompatActivity;\nimport android.os.Bundle;\nimport android.widget.TextView;\npublic class json extends AppCompatActivity {\nTextView tvJSON;\nTextView textView;\n@Override\nprotected void onCreate(Bundle savedInstanceState){\nsuper.onCreate(savedInstanceState);\nsetContentView(R.layout.activity_json);\nsetTextView();\n}\npublic void setTextView(){\ntvJSON =(TextView)findViewById(R.id.tvJSON);\ntextView =(TextView)findViewById(R.id.textView);\nString s = textView.getText()。toString();\ntvJSON.setText(s);\n}\n}
问题出现的原因是在MainActivity中的点击事件中,通过Intent传递数据给json活动时没有正确地使用getStringExtra方法来获取数据,导致应用崩溃。解决方法是在json活动中使用getIntent().getStringExtra方法来获取数据,并在TextView中显示出来。
尝试如下修改:
在MainActivity中的点击事件中添加以下代码:
buscarButton.setOnClickListener(new View.OnClickListener() { public void onClick(View view) { startActivity(new Intent(MainActivity.this, json.class) .putExtra("extra1", date.getText().toString()) .putExtra("extra2", date2.getText().toString())); } });
在json活动中添加以下代码:
if (getIntent().hasExtra("extra1")) { tvJSON.setText(getIntent().getStringExtra("extra1")); } if (getIntent().hasExtra("extra2")) { tvJSON2.setText(getIntent().getStringExtra("extra2")); }
原来的代码中,MainActivity中的Intent传递数据的部分修改为:
startActivity(new Intent(MainActivity.this, json.class) .putExtra("extra1", "Entrada: " + dayOfMonth + "/" + (month + 1) + "/" + year) .putExtra("extra2", "Salida: " + dayOfMonth + "/" + (month + 1) + "/" + year));
在json活动中,添加以下代码来声明TextView:
TextView tvJSON; TextView tvJSON2;
然后在json活动中的tvJSON.setText和tvJSON2.setText方法中使用getIntent().getStringExtra来获取数据并显示出来。
经过以上修改,问题应该得到解决。
问题的原因是在第二个Activity中无法从TextView中获取数据。解决方法是使用startActivityForResult方法在调用第二个Activity时,然后在第二个Activity中使用setResult方法将选定的值带回到第一个Activity中。
在第一个Activity中,通过调用openSecondActivity方法来打开第二个Activity:
void openSecondActivity(){ Intent intent = Intent(context, SecondActivity.class) startActivityForResult(intent,1004) }
然后在第一个Activity中,重写onActivityResult方法来接收第二个Activity返回的结果:
void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == 1004) { if (resultCode == Activity.RESULT_OK) { //对结果进行操作 } super.onActivityResult(requestCode, resultCode, data) }
在第二个Activity中,通过调用returnResult方法来返回结果给第一个Activity:
void returnResult(String result){ Intent returnIntent = new Intent() returnIntent.putExtra("result", result) setResult(Activity.RESULT_OK, returnIntent) finish() }
问题出现的原因是在第一个活动中,通过Intent传递了一个名为"DATE_KEY"的数据到第二个活动,但是在第二个活动中无法正确地获取这个数据。
解决方法是在第二个活动中,需要使用相同的键值"DATE_KEY"来获取传递的数据。具体做法是通过getIntent().getStringExtra(DATE_KEY)来获取传递的字符串数据。
以下是修改后的代码:
第一个活动(MainActivity.java)中的代码:
Button button = findViewById(R.id.button); button.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { Intent intent = new Intent(MainActivity.this, SecondActivity.class); // 传递数据 // "DATE_KEY"是第二个活动中的静态字段 intent.putExtra(SecondActivity.DATE_KEY, "20.03.2019"); startActivity(intent); } });
第二个活动(SecondActivity.java)中的代码:
public class SecondActivity extends AppCompatActivity { static final String DATE_KEY = "DATE_KEY"; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_second); // 读取传递的数据 - 字符串 "20.03.2019" String date = getIntent().getStringExtra(DATE_KEY); } }
通过以上修改,第二个活动就能正确地获取到从第一个活动传递过来的数据了。