将对象从活动传递到Android中的活动

时间:2018-04-30 13:30:22

标签: android android-intent android-activity parcelable

我是Android编程新手。我想将一个对象从一个intent传递给另一个。我使用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);
}

}

这就是我尝试传递此User对象的方式。

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

1 个答案:

答案 0 :(得分:0)

MainActivity:

NOTE: Line generated by the macro variable "TAQ_DS".
152         cq.cqm_2013:
                       _
                       22
                       200
ERROR 22-322: Syntax error, expecting one of the following: a name, ;, (, ',', 
              ANSIMISS, AS, CROSS, EXCEPT, FULL, GROUP, HAVING, INNER, 
              INTERSECT, JOIN, LEFT, NATURAL, NOMISS, ORDER, OUTER, RIGHT, 
              UNION, USING, WHERE.  

ERROR 200-322: The symbol is not recognized and will be ignored.

NOTE: PROC SQL set option NOEXEC and will continue to check the syntax of 
      statements.
NOTE: The SAS System stopped processing this step because of errors.
NOTE: PROCEDURE SQL used (Total process time):
      real time           0.02 seconds
      cpu time            0.00 seconds



ERROR: File WORK._V_CQM_2013.DATA does not exist.

NOTE: The SAS System stopped processing this step because of errors.
NOTE: SAS set option OBS=0 and will continue to check statements. 
      This might cause NOTE: No observations in data set.
WARNING: The data set WORK.XTEMP2_OXY may be incomplete.  When this step was 
         stopped there were 0 observations and 8 variables.
NOTE: DATA statement used (Total process time):
      real time           0.02 seconds
      cpu time            0.00 seconds

UserDetail活动:

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));
    }
}