在Android中将一个对象从一个活动传递到另一个活动
Posted
技术标签:
【中文标题】在Android中将一个对象从一个活动传递到另一个活动【英文标题】:Pass an object from activity to activity in Android 【发布时间】: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
实例。您确定所有字段都包含有效的String
s?
【参考方案1】:
主活动:
public class MainActivity extends AppCompatActivity
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
User user = new User();
user.setUid("1");
user.setName("kaushal");
user.setSurname("gosaliya");
user.setEmail("kaushalgosaliya5@gmail.com");
user.setUsername("kaushalgosaliya5");
user.setNumber("8866456322");
startActivity(new Intent(MainActivity.this,UserDetail.class).putExtra("userdetail",user));
用户详情活动:
public class UserDetail extends Activity
@Override
protected void onCreate(@Nullable Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_userdetail);
if(getIntent().hasExtra("userdetail"))
User user = getIntent().getParcelableExtra("userdetail");
Toast.makeText(UserDetail.this,""+user.getName(),Toast.LENGTH_LONG).show();
【讨论】:
OP 没有要求这个。User
对象很可能包含 null
值,因为当 OP 传递 mUser
对象时,很可能尚未从 Firebase 检索数据!以上是关于在Android中将一个对象从一个活动传递到另一个活动的主要内容,如果未能解决你的问题,请参考以下文章