Java 在两个活动之间传递类实例

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

我想制作一个应用程序,从第一个活动中获取用户输入,并将这些值设置为类,然后在另一个活动中显示它们

当我尝试在第二个类中获取值时,出现的错误是null指针异常。我不明白我做错了什么

这是第一项活动:

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.很高兴能帮助我们复制另一个