我将RealmList
用于android数据库。我读了它的文件。
public class M_P extends RealmObject {
@SerializedName("id")
@Expose
@PrimaryKey
private int id;
@SerializedName("project_name")
@Expose
private String project_name;
@SerializedName("vg")
@Expose
public RealmList<VG> vg;....}
和:
public class VG extends RealmObject {
@SerializedName("id")
@Expose
@PrimaryKey
@Index
private int id;
@SerializedName("name")
@Expose
private String name; ....}
当我保存新的M_P对象和新的VG时,所有新的VG将替换为所有以前的M_P! 请帮助我!
我的代码是:
public class MainActivity extends AppCompatActivity {
Realm realm;
EditText editText1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
realm=Realm.getDefaultInstance();
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
editText1=findViewById(R.id.editText);
final EditText etid=findViewById(R.id.et_id);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Number currentMax = realm.where(M_P.class).max("id");
int nextid = 0;
if (currentMax != null) {
nextid = currentMax.intValue() + 1;
}
M_P m_p=new M_P();
Date date=new Date();
if(etid.getText().toString().equals("New")){
m_p.setId(nextid);}
else {
m_p.setId(Integer.valueOf(etid.getText().toString()));
}
m_p.setProject_name("R"+date);
List<VG> vgs=MakeVG();
realm.beginTransaction();
m_p.setVg(new RealmList<>(vgs.toArray(new VG[vgs.size()])));
realm.copyToRealmOrUpdate(m_p);
realm.commitTransaction();
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
RealmResults<M_P> m_ps=realm.where(M_P.class).findAll();
List<M_P> allprojects=realm.copyFromRealm(m_ps);
allprojects.size();
}
});
}
@Override
protected void onDestroy() {
super.onDestroy();
realm.close();
}
private List<VG> MakeVG(){
List<VG> vs=new ArrayList<>();
for(int i=0;i<10;i++){
VG v=new VG();
v.setId(i);
v.setName(editText1.getText().toString()+i);
vs.add(v);
}
return vs;
}
}
M_P:项目。 VG:车辆。
当我用新的VG列表保存新的M_P对象时,新的VG替换为全部上一个M_P!
答案 0 :(得分:1)
这是因为您的新VG的ID与以前的VG相同。您需要更改ID模式。您不能有两个具有相同PrimaryKey / ID的对象。