Передать объект из активности в активность в Android - PullRequest
0 голосов
/ 30 апреля 2018

Я новичок в программировании 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);
}

}

И вот как я пытаюсь передать этот объект User.

Intent intent = new Intent(getApplicationContext(), mainPage.class);
intent.putExtra("User",mUser);

И как я пытаюсь получить:

Intent intent = getIntent();
user = intent.getParcelableExtra("User");
displayName = user.getName();

Я проверил, работает ли метод getUsername() в первом действии в журнале, и он работает нормально. Однако, когда я пытаюсь отправить его в другой вид деятельности, getUsername возвращает null.

1 Ответ

0 голосов
/ 30 апреля 2018

MainActivity:

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

UserDetail Activity:

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();
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...