Tôi gặp vấn đề khi cố gắng truyền realmobject sang hoạt động khác. Vì vậy, tôi đã tạo một đối tượng DTO dựa trên mô hình của tôi và đối tượng này triển khai Kiện bưu. Các công trình của nó, nhưng tôi biết đó không phải là cách tốt hơn.
Xem triển khai:
Tôi có hai thực thể, Sinh viên và Kỷ luật, như mã bên dưới.
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;
}
}
Và lớp Kỷ luật.
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 and DisciplineDTO thực hiện Khớp nối.
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];
}
};
}
Cuối cùng, cách tôi sử dụng điều này trong hoạt động của mình.
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);
}
});
Trong hoạt động AddDiscipline, tôi nhận đối tượng 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());
Nếu bạn muốn toàn bộ mã nguồn, nhận được trong https://github.com/Turbiani/RealmForDummiesAndroid
Bạn có thể gửi stack trace? –
Đăng mã cho lớp 'Stundent' –