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

Java 我的方法toString()中的调用目标异常,java,android,Java,Android,我是Java和Android的新手。我需要将一些文本数据从一个活动发送到另一个活动。这是一种将这些文本数据发送到另一个活动的方法: public void commandListener(View target) { switch (target.getId()) { case R.id.button1: Intent intent = new Intent();

我是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;
        }
    }
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));
    }
在这段代码中,我得到了intent.putExtra(“sendpersioninfo”,somePerson.toString())的接受。toString()会引发该异常。我的错在哪里? 有些人有一个典型的人 下面是一个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;
    }
}
这是来自另一个活动的代码的一部分,它接受来自另一个活动的文本数据:

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

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

  intent.putExtra("Firstname", somePerson.getFirstName());
  intent.putExtra("LastName", somePerson.getLastName());
  intent.putExtra("Age", somePerson.getAge());
somePerson.toString()
中删除
toString()
方法,因为您正在实现
Serializable
,所以不需要
toString()
替换

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


我建议将对象打包,而不是序列化,因为这样更快。然后,您可以在可包裹的对象上执行额外的操作


有关如何创建可包裹对象的参考,请参阅。

我看不到在第一段代码中您在哪里声明“somePerson”。是否确定在声明方法之前已正确设置?
InvocationTargetException
是另一个异常的包装,原始异常是什么?(
ite.getCause()
)。是的,在方法之前声明了某人。这只是一个类型演示。所有的代码,而你没有显示出重要的部分。在哪里以及如何初始化
somePerson
?在我的代码中,此变量声明为“Person somePerson”。她那类型的人就是她自己。这是在课堂上展示的,我可能遗漏了什么。这是如何解决这个问题的?可能是,但是为什么我不能使用我的方法toString()来做这件事?但是我想使用这个方法发送数据,没有它我怎么做?