当我尝试将领域对象传递给另一个活动时,我遇到了一些问题。所以,我基于我的模型创建了一个 DTO 对象,这个对象实现了 Parcelable。它的作品,但我知道这不是更好的方法。
查看实现:
我有两个实体,Student 和 Disciplines,代码如下。
package turbiani.com.br.realmfordummiesandroid.model;
import android.os.Parcel;
import android.os.Parcelable;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Random;
import java.util.UUID;
import io.realm.RealmList;
import io.realm.RealmObject;
import io.realm.annotations.Ignore;
import io.realm.annotations.PrimaryKey;
/**
* Created by turbiani on 23/07/15.
*/
public class Student extends RealmObject {
@PrimaryKey
private int id;
private String name;
private RealmList<Discipline> disciplines;
public Student(){
this.id = new Random().nextInt(Integer.MAX_VALUE);
}
public Student(String name, RealmList<Discipline> disciplines) {
this.name = name;
this.disciplines = disciplines;
this.id = new Random().nextInt(Integer.MAX_VALUE);
}
private Student(Parcel p){
this.name = p.readString();
this.disciplines = new RealmList<Discipline>();
this.id = p.readInt();
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public RealmList<Discipline> getDisciplines() {
return disciplines;
}
public void setDisciplines(RealmList<Discipline> disciplines) {
this.disciplines = disciplines;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
还有纪律课。
package turbiani.com.br.realmfordummiesandroid.model;
import android.os.Parcel;
import android.os.Parcelable;
import java.io.Serializable;
import io.realm.RealmObject;
/**
* Created by turbiani on 23/07/15.
*/
public class Discipline extends RealmObject {
private String name;
private String grade;
private int studentId;
public Discipline(){}
public Discipline(String name, String grade, int studentId) {
this.name = name;
this.grade = grade;
this.studentId = studentId;
}
private Discipline(Parcel p){
this.name = p.readString();
this.grade = p.readString();
this.studentId = p.readInt();
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGrade() {
return grade;
}
public void setGrade(String grade) {
this.grade = grade;
}
public int getStudentId() {
return studentId;
}
public void setStudentId(int studentId) {
this.studentId = studentId;
}
}
StudentDTO 和 DisciplineDTO 实现 Parcelable。
package turbiani.com.br.realmfordummiesandroid.dto;
import android.os.Parcel;
import android.os.Parcelable;
import java.util.ArrayList;
import java.util.List;
import turbiani.com.br.realmfordummiesandroid.model.Discipline;
/**
* Created by turbiani on 04/08/15.
*/
public class StudentDTO implements Parcelable{
private int studentId;
private String studentName;
private List<DisciplineDTO> studentDisciplines;
public StudentDTO(){}
private StudentDTO(Parcel p){
this.studentName = p.readString();
this.studentDisciplines = new ArrayList<DisciplineDTO>();
p.readTypedList(this.studentDisciplines, DisciplineDTO.CREATOR);
this.studentId = p.readInt();
}
public String getStudentName() {
return studentName;
}
public void setStudentName(String studentName) {
this.studentName = studentName;
}
public List<DisciplineDTO> getStudentDisciplines() {
return studentDisciplines;
}
public void setStudentDisciplines(List<DisciplineDTO> studentDisciplines) {
this.studentDisciplines = studentDisciplines;
}
public int getStudentId() {
return studentId;
}
public void setStudentId(int studentId) {
this.studentId = studentId;
}
public static final Parcelable.Creator<StudentDTO> CREATOR = new Parcelable.Creator<StudentDTO>(){
public StudentDTO createFromParcel(Parcel in){
return new StudentDTO(in);
}
public StudentDTO[] newArray(int size){
return new StudentDTO[size];
}
};
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(studentName);
dest.writeTypedList(studentDisciplines);
dest.writeInt(studentId);
}
}
package turbiani.com.br.realmfordummiesandroid.dto;
import android.os.Parcel;
import android.os.Parcelable;
/**
* Created by turbiani on 04/08/15.
*/
public class DisciplineDTO implements Parcelable {
private String disciplineName;
private String disciplineGrade;
private int studentId;
public DisciplineDTO(){}
private DisciplineDTO(Parcel p){
this.disciplineName = p.readString();
this.disciplineGrade = p.readString();
this.studentId = p.readInt();
}
public String getDisciplineName() {
return disciplineName;
}
public void setDisciplineName(String disciplineName) {
this.disciplineName = disciplineName;
}
public String getDisciplineGrade() {
return disciplineGrade;
}
public void setDisciplineGrade(String disciplineGrade) {
this.disciplineGrade = disciplineGrade;
}
public int getStudentId() {
return studentId;
}
public void setStudentId(int studentId) {
this.studentId = studentId;
}
goes to
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(disciplineName);
dest.writeString(disciplineGrade);
dest.writeInt(studentId);
}
public static final Parcelable.Creator<DisciplineDTO> CREATOR = new Parcelable.Creator<DisciplineDTO>(){
public DisciplineDTO createFromParcel(Parcel in){
return new DisciplineDTO(in);
}
public DisciplineDTO[] newArray(int size){
return new DisciplineDTO[size];
}
};
}
最后,我如何在我的活动中使用它。
studentList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
StudentAdapter adapter = new StudentAdapter();
Intent intent = new Intent(MainActivity.this, AddDiscipline.class);
intent.putExtra("StudentDTO", adapter.adaptToStudentDTO(students.get(position)));
startActivity(intent);
}
});
在 AddDiscipline 活动中,我得到 dto 对象。
@Override
public void onResume() {
super.onResume();
studentDisciplineList = (ListView) findViewById(R.id.studentDisciplineList);
btnAddDiscipline = (Button) findViewById(R.id.btnAddDiscipline);
final EditText disciplineName = (EditText) findViewById(R.id.txtDisciplineName);
final EditText disciplineGrade = (EditText) findViewById(R.id.txtGrade);
this.studentDTO = getIntent().getParcelableExtra("StudentDTO");
studentDisciplineList.setAdapter(getAdapterToStudentDisciplineList());
如果你想要完整的源代码,请进入https://github.com/Turbiani/RealmForDummiesAndroid