【发布时间】:2018-10-10 14:43:13
【问题描述】:
我是 Android 编程新手。我想将一个对象从一个意图传递给另一个。我用的是Android的Parcelable,但是Parcelable好像写不正常。这是我的对象的类。
public class User implements Parcelable{
//parameters
private String name;
private String surname;
private String email;
private String number;
private String username;
private String Uid;
//constructors
public User(final FirebaseUser user, final DatabaseReference reference){
Uid = user.getUid();
reference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
name = dataSnapshot.child("Users").child(Uid).child("Name").getValue(String.class);
surname = dataSnapshot.child("Users").child(Uid).child("Surname").getValue(String.class);
email = dataSnapshot.child("Users").child(Uid).child("Email").getValue(String.class);
number = dataSnapshot.child("Users").child(Uid).child("Number").getValue(String.class);
if ( number == null)
number = "No number";
username = dataSnapshot.child("Users").child(Uid).child("Username").getValue(String.class);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
public User(Parcel in) {
this.name = in.readString();
this.surname = in.readString();
this.email = in.readString();
this.number = in.readString();
this.username = in.readString();
this.Uid = in.readString();
}
public static final Creator<User> CREATOR = new Creator<User>() {
@Override
public User createFromParcel(Parcel in) {
return new User(in);
}
@Override
public User[] newArray(int size) {
return new User[size];
}
};
public String getEmail() {
return email;
}
public String getUid()
{
return Uid;
}
public String getName(){
return name;
}
public String getSurname(){
return surname;
}
public String getMail(){
return email;
}
public String getNumber(){
return number;
}
public String getUsername()
{
return username;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(this.name);
dest.writeString(this.surname);
dest.writeString(this.email);
dest.writeString(this.number);
dest.writeString(this.username);
dest.writeString(this.Uid);
}
}
这就是我尝试传递此用户对象的方式。
Intent intent = new Intent(getApplicationContext(), mainPage.class);
intent.putExtra("User",mUser);
以及我如何获得:
Intent intent = getIntent();
user = intent.getParcelableExtra("User");
displayName = user.getName();
我在 Log 的第一个活动中检查了 getUsername() 方法是否有效,它工作正常。但是,当我尝试将其发送到另一个活动时,getUsername 返回null。
【问题讨论】:
-
你能告诉我们你在填写你的“实际”数据吗?
-
您在第一个活动中在哪里调用
Log。请记住,您是从 Firebase 异步获取数据...这就是为什么我们需要更多详细信息,尤其是#getParcelableExtra()如果找不到对象,则返回null! -
请展示您如何构建
User实例。您确定所有字段都包含有效的Strings?
标签: android android-intent android-activity parcelable