问题
I'm trying to make an activity that take the value of the EditText and put it in the TextView in another activity.
This is the code for the first activity which contains a Textview and option menu to edit it
public class Saturday extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.saturday);
Intent i = getIntent();
String txt = i.getExtras().getString("txtData","");
final TextView Tclass1;
Tclass1 = (TextView)findViewById(R.id.seven);
Tclass1.setText(txt);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.saturday, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
switch(item.getItemId())
{
case R.menu.saturday:
edit_schedule();
return true;
}
return super.onOptionsItemSelected(item);
}
public void edit_schedule() {
final TextView Tclass1;
Tclass1 = (TextView)findViewById(R.id.seven);
Intent i = new Intent(this, EditSaturday.class);
i.putExtra("text" , Tclass1.getText().toString());
startActivity(i);
}}
This is the code for the other activity which contains an EditText with the save button
public class EditSaturday extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.edit_saturday);
Intent i = getIntent();
String txt = i.getExtras().getString("txtData","");
final EditText Eclass1;
Eclass1 = (EditText)findViewById(R.id.eseven);
Eclass1.setText(txt);
findViewById(R.id.save).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
save();
}});
}
public void save() {
final EditText Eclass1;
Eclass1 = (EditText)findViewById(R.id.eseven);
Intent i = new Intent(this, Saturday.class);
i.putExtra("text" , Eclass1.getText().toString());
startActivity(i);
}}
After I run the application it give me an error
this is the logCat
04-14 08:15:17.911: E/AndroidRuntime(1202): FATAL EXCEPTION: main
04-14 08:15:17.911: E/AndroidRuntime(1202): java.lang.RuntimeException: Unable to start activity ComponentInfo{sarah.bodoor.sto/sarah.bodoor.sto.Saturday}: java.lang.NullPointerException
04-14 08:15:17.911: E/AndroidRuntime(1202): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
04-14 08:15:17.911: E/AndroidRuntime(1202): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
04-14 08:15:17.911: E/AndroidRuntime(1202): at android.app.ActivityThread.access$600(ActivityThread.java:141)
04-14 08:15:17.911: E/AndroidRuntime(1202): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
04-14 08:15:17.911: E/AndroidRuntime(1202): at android.os.Handler.dispatchMessage(Handler.java:99)
04-14 08:15:17.911: E/AndroidRuntime(1202): at android.os.Looper.loop(Looper.java:137)
04-14 08:15:17.911: E/AndroidRuntime(1202): at android.app.ActivityThread.main(ActivityThread.java:5041)
04-14 08:15:17.911: E/AndroidRuntime(1202): at java.lang.reflect.Method.invokeNative(Native Method)
04-14 08:15:17.911: E/AndroidRuntime(1202): at java.lang.reflect.Method.invoke(Method.java:511)
04-14 08:15:17.911: E/AndroidRuntime(1202): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
04-14 08:15:17.911: E/AndroidRuntime(1202): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
04-14 08:15:17.911: E/AndroidRuntime(1202): at dalvik.system.NativeStart.main(Native Method)
04-14 08:15:17.911: E/AndroidRuntime(1202): Caused by: java.lang.NullPointerException
04-14 08:15:17.911: E/AndroidRuntime(1202): at sarah.bodoor.sto.Saturday.onCreate(Saturday.java:22)
04-14 08:15:17.911: E/AndroidRuntime(1202): at android.app.Activity.performCreate(Activity.java:5104)
04-14 08:15:17.911: E/AndroidRuntime(1202): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
04-14 08:15:17.911: E/AndroidRuntime(1202): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
04-14 08:15:17.911: E/AndroidRuntime(1202): ... 11 more
回答1:
Intent i = new Intent(this, Saturday.class);
should be
Intent i = new Intent(EditSaturday.this, Saturday.class);
// should be referring to activity context
in your save()
Also
i.putExtra("text" , Eclass1.getText().toString());// key in EditSaturday
// keys should be the same
String txt = i.getExtras().getString("txtData","");// key in saturday
// keys are different
In your first activity get the editext value on button click and use intents to pass data between activities
EditText et= (EditText)findviewById(R.id.edittext);
String s= et.getText().toString();
Intent i= new Intent(firstActivity.this,secondActivity.class);
i.putExtra("key",s);
startActivity(i);
In your second actiivty onCreate()
setContentView(R.layout.second);
Bundle extras= getIntent().getExtras();
if(extras!=null)
{
TextView tv= (TextView)findviewById(R.id.textView1);
String value = extras.getString("key");
tv.setText(value);
}
回答2:
try to implement this code.
String txt = i.getExtras().getString("text","");
replace with
String txt = i.getExtras().getString("txtData","");
because you required same key for get value from passing intent.
you put key "text" when pass intent and use key "txtData" when get that intent that both are different so, use same key foe passing and getting.
after you use following code for call next activity by option menu click.
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
menu.add(0, 0, 0, "Next");
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
switch(item.getItemId())
{
case 0:
edit_schedule();
return true;
}
return super.onOptionsItemSelected(item);
}
来源:https://stackoverflow.com/questions/15997158/transfer-data-between-edittext-and-text-view