Java 在两个活动之间传递类实例
我想制作一个应用程序,从第一个活动中获取用户输入,并将这些值设置为类,然后在另一个活动中显示它们 当我尝试在第二个类中获取值时,出现的错误是null指针异常。我不明白我做错了什么 这是第一项活动:Java 在两个活动之间传递类实例,java,android,Java,Android,我想制作一个应用程序,从第一个活动中获取用户输入,并将这些值设置为类,然后在另一个活动中显示它们 当我尝试在第二个类中获取值时,出现的错误是null指针异常。我不明白我做错了什么 这是第一项活动: public class MainActivity extends Activity { EditText name, phone, type; Button addBtn; public final static String SER_KEY = "com.easyinfogeek.objectP
public class MainActivity extends Activity {
EditText name, phone, type;
Button addBtn;
public final static String SER_KEY = "com.easyinfogeek.objectPass.ser";
public final static String Tag = "Yes";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
addBtn = findViewById(R.id.button);
addBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SerializeMethod();
}
});
}
public void SerializeMethod(){
name = findViewById(R.id.name);
phone = findViewById(R.id.phone);
type = findViewById(R.id.type);
PhoneBookEntry book = new PhoneBookEntry();
book.setName(name.toString());
book.setPhone(phone.toString());
book.setType(type.toString());
Intent intent = new Intent(this, SecondActivity.class);
Bundle bundle = new Bundle();
bundle.putSerializable(SER_KEY, book);
startActivity(intent);
}
}
public class SecondActivity extends Activity {
final public static String Tag = "Yes";
TextView txt1, txt2, txt3;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
txt1 = findViewById(R.id.textView1);
txt2 = findViewById(R.id.textView2);
txt3 = findViewById(R.id.textView3);
PhoneBookEntry book = (PhoneBookEntry) getIntent().getSerializableExtra(MainActivity.SER_KEY);
txt1.setText(book.getName());
txt2.setText(book.getPhone());
txt3.setText(book.getType());
}
}
第二项活动:
public class MainActivity extends Activity {
EditText name, phone, type;
Button addBtn;
public final static String SER_KEY = "com.easyinfogeek.objectPass.ser";
public final static String Tag = "Yes";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
addBtn = findViewById(R.id.button);
addBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SerializeMethod();
}
});
}
public void SerializeMethod(){
name = findViewById(R.id.name);
phone = findViewById(R.id.phone);
type = findViewById(R.id.type);
PhoneBookEntry book = new PhoneBookEntry();
book.setName(name.toString());
book.setPhone(phone.toString());
book.setType(type.toString());
Intent intent = new Intent(this, SecondActivity.class);
Bundle bundle = new Bundle();
bundle.putSerializable(SER_KEY, book);
startActivity(intent);
}
}
public class SecondActivity extends Activity {
final public static String Tag = "Yes";
TextView txt1, txt2, txt3;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
txt1 = findViewById(R.id.textView1);
txt2 = findViewById(R.id.textView2);
txt3 = findViewById(R.id.textView3);
PhoneBookEntry book = (PhoneBookEntry) getIntent().getSerializableExtra(MainActivity.SER_KEY);
txt1.setText(book.getName());
txt2.setText(book.getPhone());
txt3.setText(book.getType());
}
}
这是PhoneBookEntry类:
public class PhoneBookEntry implements Serializable {
private static final long serialVersionUID = -7060210544600464481L;
private String name;
private String phone;
private String type;
--- getters and setters ---
}
您只是忘了在您的
意图中添加包
,请再次检查代码
只需使用Intent.putExtras(mBundle)在Intent
中添加您的Bundle
代码>它可以正常工作
试试这个
Intent intent = new Intent(this, SecondActivity.class);
Bundle bundle = new Bundle();
bundle.putSerializable(SER_KEY, book);
intent.putExtras(mBundle);
startActivity(intent);
使用Parcelable
而不是Serializable
。按照这个例子
public class MyParcelable implements Parcelable {
private int mData;
public int describeContents() {
return 0;
}
public void writeToParcel(Parcel out, int flags) {
out.writeInt(mData);
}
public static final Parcelable.Creator<MyParcelable> CREATOR
= new Parcelable.Creator<MyParcelable>() {
public MyParcelable createFromParcel(Parcel in) {
return new MyParcelable(in);
}
public MyParcelable[] newArray(int size) {
return new MyParcelable[size];
}
};
private MyParcelable(Parcel in) {
mData = in.readInt();
}
}
公共类MyParcelable实现了Parcelable{
私有int mData;
公共int描述内容(){
返回0;
}
公共无效写入包(包出,内部标志){
out.writeInt(mData);
}
公共静态最终包裹。创建者
=新的Parcelable.Creator(){
公共MyParcelable createFromParcel(中的地块){
返回新的MyParcelable(在中);
}
公共MyParcelable[]新数组(整数大小){
返回新的MyParcelable[大小];
}
};
私人MyParcelable(包裹内){
mData=in.readInt();
}
}
是完整的示例。@M.p.很高兴能帮助我们复制另一个