Android 在活动之间传输数据时出现问题。应用程序停止对按钮单击的操作

Android 在活动之间传输数据时出现问题。应用程序停止对按钮单击的操作,android,Android,我在屏幕之间传输数据时遇到问题。 我使用了意图。 下面是我的代码 这是我的父类中的代码: final EditText ed1= (EditText) findViewById(R.id.EditText05); Button b = (Button) findViewById(R.id.submit); b.setOnClickListener(new OnClickListener() { @Override publi

我在屏幕之间传输数据时遇到问题。 我使用了意图。 下面是我的代码

这是我的父类中的代码:

    final EditText ed1= (EditText) findViewById(R.id.EditText05);       
    Button b = (Button) findViewById(R.id.submit);
    b.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {

            Intent i = new Intent(S1.this,S2.class);

            i.putExtra("ed1",ed1.getText().toString());

            startActivity(i);

        }
    });
这是my child类中的一个代码:

    TextView tv = (TextView)findViewById(R.id.yo);

    tv.setText(getIntent().getExtras().getString("ed1"));
当我运行应用程序时,它停止工作,并在logcat中显示以下内容:

    04-11 21:32:32.698: E/AndroidRuntime(923): FATAL EXCEPTION: main
    04-11 21:32:32.698: E/AndroidRuntime(923): Process: com.app.experiment, PID: 923
    04-11 21:32:32.698: E/AndroidRuntime(923): java.lang.NullPointerException
    04-11 21:32:32.698: E/AndroidRuntime(923):  at com.app.experiment.S1$1.onClick(S1.java:56)
    04-11 21:32:32.698: E/AndroidRuntime(923):  at android.view.View.performClick(View.java:4424)
    04-11 21:32:32.698: E/AndroidRuntime(923):  at android.view.View$PerformClick.run(View.java:18383)
    04-11 21:32:32.698: E/AndroidRuntime(923):  at android.os.Handler.handleCallback(Handler.java:733)
    04-11 21:32:32.698: E/AndroidRuntime(923):  at android.os.Handler.dispatchMessage(Handler.java:95)
    04-11 21:32:32.698: E/AndroidRuntime(923):  at android.os.Looper.loop(Looper.java:137)
    04-11 21:32:32.698: E/AndroidRuntime(923):  at android.app.ActivityThread.main(ActivityThread.java:4998)
    04-11 21:32:32.698: E/AndroidRuntime(923):  at java.lang.reflect.Method.invokeNative(Native Method)
    04-11 21:32:32.698: E/AndroidRuntime(923):  at java.lang.reflect.Method.invoke(Method.java:515)
    04-11 21:32:32.698: E/AndroidRuntime(923):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:777)
    04-11 21:32:32.698: E/AndroidRuntime(923):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:593)
    04-11 21:32:32.698: E/AndroidRuntime(923):  at dalvik.system.NativeStart.main(Native Method)
这是我的xml文件,其中有一个按钮:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"

android:gravity="center_vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >                     

<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:text="@string/Starters"
android:textAppearance="?android:attr/textAppearanceMedium" />

<ListView
    android:id="@+id/android:list"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentRight="true"
    android:layout_below="@+id/submit"
    android:visibility="invisible" />

<Button
    android:id="@+id/submit"
    style="?android:attr/buttonStyleSmall"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:text="@string/Submit" />

  </RelativeLayout>
这是我的SingleContactActivity.class:

       public class SingleContactActivity  extends Activity {

private static final String TAG_Name = "Name";
@Override
       public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.textview);
    Intent in = getIntent();
    String name = in.getStringExtra(TAG_Name);
    TextView lblName = (TextView) findViewById(R.id.name);
    lblName.setText(name);
    }}

我相信EditText.getText可以返回null。

对于Android和Java,因为大多数错误都会使程序崩溃,学习测试所有内容,并记录意外情况

对onclick侦听器尝试以下操作:

if(ed1 != null){
  CharSequence charSequence = ed1.getText();
  if(text != null){
    text = charSequence.toString();
    Intent i = new Intent(S1.this,S2.class);
    i.putExtra("ed1",text);
    startActivity(i);
  } else {
    Log.d("DEBUG", "text is null");
  }
} else {
  Log.d("DEBUG", "ed1 is null");
}
另一块可能是这样的:

TextView tv = (TextView)findViewById(R.id.yo);
if(tv != null){
  Bundle extras = getIntent().getExtras();
  if(extras != null){
    String text = extras.getString("ed1");
    if(text != null){
      tv.setText(text);
    } else {
      Log.d("DEBUG", "text is null");
    }
  } else {
    Log.d("DEBUG", "extras is null")
  }
} else {
  Log.d("DEBUG", "tv is null");
}

我认为您不能将EditText声明为final,因为这意味着它不会记住新文本,并且它将始终指向为null的初始化值,因此您有nullpointer异常。试着在ed1的公告中通过决赛,现在让我们来。

您已经获得了NPE。Post活动代码和xml文件。u在onClick上得到一个NullPointerException。这可能是因为ed1为空,ID键入是否正确?顺便说一句,您可以在运行时按debug按钮一步一步地进行,看看发生了什么以及为什么会发生这种情况。这是一个非常典型的错误,您应该学会自己调试它。当您试图在ed1.getText.toString行中检索一个值时,您会得到NPE。我已经发布了xml now@OnikI已经声明edittext为最终版本。请把我的代码称为类文件,我已经发布了这一部分。我想你们不能将你们的EditText声明为final,因为这意味着它不会记住新的文本,这是不正确的。声明它为final将意味着该变量不能重新分配给另一个实例,但它不会影响EditText的行为。@Big MoMo。好吧,我想我明白我错在哪里了:final意味着你不能在一个实例中修改它,所以当然你可以编辑它,即使你声明它是final并记住它。但也许我并不是完全错了,因为若你们一开始就记住null,你们可以得到NullPointErrorException,或者不?请告诉我。谢谢你的更正。你能为这篇文章提供更多的上下文吗?不,这就是答案。它返回null,OP认为它不能返回,因此取消引用它,导致异常。
        public class S2 extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.yo);
                    TextView tv = (TextView)findViewById(R.id.edit_text_06);
    tv.setText(getIntent().getExtras().getString("ed1"));
        } }
       public class SingleContactActivity  extends Activity {

private static final String TAG_Name = "Name";
@Override
       public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.textview);
    Intent in = getIntent();
    String name = in.getStringExtra(TAG_Name);
    TextView lblName = (TextView) findViewById(R.id.name);
    lblName.setText(name);
    }}
if(ed1 != null){
  CharSequence charSequence = ed1.getText();
  if(text != null){
    text = charSequence.toString();
    Intent i = new Intent(S1.this,S2.class);
    i.putExtra("ed1",text);
    startActivity(i);
  } else {
    Log.d("DEBUG", "text is null");
  }
} else {
  Log.d("DEBUG", "ed1 is null");
}
TextView tv = (TextView)findViewById(R.id.yo);
if(tv != null){
  Bundle extras = getIntent().getExtras();
  if(extras != null){
    String text = extras.getString("ed1");
    if(text != null){
      tv.setText(text);
    } else {
      Log.d("DEBUG", "text is null");
    }
  } else {
    Log.d("DEBUG", "extras is null")
  }
} else {
  Log.d("DEBUG", "tv is null");
}