Java 我的方法toString()中的调用目标异常
我是Java和Android的新手。我需要将一些文本数据从一个活动发送到另一个活动。这是一种将这些文本数据发送到另一个活动的方法:Java 我的方法toString()中的调用目标异常,java,android,Java,Android,我是Java和Android的新手。我需要将一些文本数据从一个活动发送到另一个活动。这是一种将这些文本数据发送到另一个活动的方法: public void commandListener(View target) { switch (target.getId()) { case R.id.button1: Intent intent = new Intent();
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()来做这件事?但是我想使用这个方法发送数据,没有它我怎么做?