2013-04-14 19 views
0

我试图做一个活动,将EditText的值放到另一个活动的TextView中。EditText和文本视图之间传输数据

这是包含一个TextView和选项菜单编辑

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); 

}} 

这是其他活动包含与保存按钮

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); 

}} 
一个EditText代码中的第一个活动代码

后,我运行应用程序它给我一个错误

这是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); 

应该

Intent i = new Intent(EditSaturday.this, Saturday.class); 
// should be referring to activity context 

在您保存()

而且

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 

在您的第一项活动获得按钮点击editext价值和使用意图通过活动之间的数据

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); 

在你的第二个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); 
} 
+0

它的工作原理!那个错误消失了。但现在,当我从选项菜单中单击该项目时,其他活动无法启动! –

+0

试试Intent i = new Intent(Saturday.this,EditSaturday.class);你应该参考你的活动上下文。你是否得到空位错误? – Raghunandan

+0

是的,我改变了。现在我没有得到nullpointerexception,但是当我点击选项菜单上的项目时,其他活动不启动 –

0

尝试执行这段代码。

String txt = i.getExtras().getString("text",""); 

更换

String txt = i.getExtras().getString("txtData",""); 

,因为你需要从传球意图获取值相同的密钥。

你在传递intent的时候放了key“text”,当得到两个不同的意图的时候使用key“txtData”,就可以使用同样的key foe传递和get。

通过选项菜单单击使用以下代码调用下一个活动后。

@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); 

} 
+0

我很抱歉没有注意到这个错误。我根据你的回答编辑了我的答案。虽然我举了一个具有相同关键的例子,但我没有注意到帖子中的相同。 – Raghunandan

+0

它的工作原理!那个错误消失了。但现在,当我从选项菜单中单击该项目时,其他活动无法启动! –

+1

使用上述代码从选项菜单调用下一个活动。 –

相关问题