我的方法toString()中的调用目标异常

时间:2014-04-25 19:33:37

标签: java android

我是Java和Android的新手。我需要将一个文本数据从一个活动发送到另一个活动。这是一种将这些文本数据发送到另一个活动的方法:

public void commandListener(View target) 
    {
        switch (target.getId()) 
        {
            case R.id.button1:
                Intent intent = new Intent();
                intent.setClass(this, SubActivity.class);
                intent.putExtra("Send to the second activity", ++counter);
                intent.putExtra("Send person info", somePerson.toString());// INVOCATION TARGET EXCEPTION ON THIS STRING!!!
                startActivity(intent);
                finish();
                break;
            case R.id.button2:
                Intent intent2 = new Intent();
                intent2.setClass(this, ThirdActivity.class);
                intent2.putExtra("Send to the third activity", ++counter);
                startActivity(intent2);
                finish();
                break;
            default:
                counter = 0;
                finish();
                break;
        }
    }

在这段代码中,我得到了intent.putExtra(“发送人信息”,somePerson.toString())的接受。 somePerson.toString()启动该异常。我的错误在哪里? SomePerson有一个Person类型 这是Person的实现:

public class Person implements Serializable 
{
    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    private String firstName = "Vasya";
    private String lastName = "Pupkin";
    private Integer age = 58;
    private Integer phone = 02;

    @Override
    public String toString() 
    {
        return "Person [firstName=" + firstName + ", lastName=" + lastName
                + ", age=" + age + "]";
    }

    public void setName(String name)
    {
        firstName = name;
    }

    public void setLastName(String lName)
    {
        lastName = lName;
    }

    public void setAge(Integer personAge)
    {
        age = personAge;
    }

    public void setPhone(Integer personPhone)
    {
        phone = personPhone;
    }
}

这是来自另一个活动的代码的一部分,该活动接受来自另一个活动的文本数据:

static int counter = 0;
    String personInfo;
    TextView counterView;
    TextView personInfoView;

    private static final String TAG = "myLogs";

    @Override
    protected void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.second_activity);

        counter = getIntent().getExtras().getInt("Send to the second activity");
        personInfo = getIntent().getExtras().getString("Send person info");
        counterView = (TextView)findViewById(R.id.textView4);
        counterView.setText(String.valueOf(counter));
        personInfoView = (TextView)findViewById(R.id.textView6);
        personInfoView.setText(personInfo);
        Log.d(TAG, "Counter value:");
        Log.d(TAG, String.valueOf(counter));
    }

这是发送数据的活动的XML代码:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    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="com.example.switchactivity.MainActivity"
    tools:ignore="MergeRootFrame" >

    <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/this is the main activity" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/textView1"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="14dp"
        android:text="Counter" />

    <TextView
        android:id="@+id/textView3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/textView2"
        android:layout_below="@+id/textView2"
        android:layout_marginTop="17dp"
        android:text="TextView" />

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/textView3"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="14dp"
        android:onClick="commandListener"
        android:text="Forward" />

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/button1"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="16dp"
        android:onClick="commandListener"
        android:text="Third Activity" />

    <TextView
        android:id="@+id/textView4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignRight="@+id/textView2"
        android:layout_below="@+id/button2"
        android:text="Name" />

    <EditText
        android:id="@+id/editText1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/textView4"
        android:layout_centerHorizontal="true"
        android:ems="10" >

        <requestFocus />
    </EditText>

    <TextView
        android:id="@+id/textView5"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/textView4"
        android:layout_below="@+id/editText1"
        android:text="Second name" />

    <EditText
        android:id="@+id/editText2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/textView5"
        android:layout_centerHorizontal="true"
        android:ems="10" />

    <TextView
        android:id="@+id/textView6"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/textView5"
        android:layout_below="@+id/editText2"
        android:text="Age" />

    <EditText
        android:id="@+id/editText3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/textView6"
        android:layout_centerHorizontal="true"
        android:ems="10" />

    <TextView
        android:id="@+id/textView7"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignRight="@+id/textView6"
        android:layout_below="@+id/editText3"
        android:text="Phone" />

    <EditText
        android:id="@+id/editText4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/textView7"
        android:layout_centerHorizontal="true"
        android:ems="10" />

</RelativeLayout>

这是活动的XML代码,它接受文本数据:

<?xml version="1.0" encoding="UTF-8"?>
<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: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="com.example.switchactivity.SecondActivity$PlaceholderSub" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        />

    <TextView
        android:id="@+id/textView3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignRight="@+id/textView2"
        android:layout_below="@+id/textView1"
        android:text="Counter" />

    <TextView
        android:id="@+id/textView4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignRight="@+id/textView3"
        android:layout_below="@+id/textView3"
        android:text="TextView" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignTop="@+id/textView1"
        android:layout_centerHorizontal="true"
        android:text=" Second activity" />

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/textView4"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="14dp"
        android:onClick="commandListener2"
        android:text="Back" />

    <TextView
        android:id="@+id/textView5"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/button2"
        android:layout_centerHorizontal="true"
        android:text="Name" />

    <TextView
        android:id="@+id/textView6"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/textView1"
        android:layout_alignParentRight="true"
        android:layout_below="@+id/textView5"
        android:text="TextView" />

</RelativeLayout>

3 个答案:

答案 0 :(得分:0)

Person类中的每个变量编写所有getter方法并设置每个变量并使用下面的代码行将一个文本数据从一个活动发送到另一个活动

  intent.putExtra("Firstname", somePerson.getFirstName());
  intent.putExtra("LastName", somePerson.getLastName());
  intent.putExtra("Age", somePerson.getAge());

答案 1 :(得分:0)

toString()移除somePerson.toString()方法,因为您正在实施Serializable,因此无需toString () 替换

   intent.putExtra("Send person info", somePerson.toString());

 intent.putExtra("Send person info", somePerson);

答案 2 :(得分:0)

我建议将对象设为parcelable而不是serializable,因为它更快。然后你可以在parcelable对象上做一个putExtra。

有关如何创建parcelable对象的参考,请参阅http://developer.android.com/reference/android/os/Parcelable.html