Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 手动更新外键。_Android_Realm - Fatal编程技术网

Android 手动更新外键。

Android 手动更新外键。,android,realm,Android,Realm,我非常清楚领域中缺少外键。但是我遇到了这个问题。我以一种标准化的方式接收数据,我必须找出如何正确地保持这种关系 例如: class User{ private int id; private Email email; } class Email{ private int id; private String address; } 我收到的信息如下: {user={id:1, emailId:1}} 如何在现有领域对象中存储此类数据?您必须自己解析JSON才能设置链接。根据您

我非常清楚领域中缺少外键。但是我遇到了这个问题。我以一种标准化的方式接收数据,我必须找出如何正确地保持这种关系

例如:

class User{
  private int id;
  private Email email;
}

class Email{
  private int id;
  private String address;
}
我收到的信息如下:

{user={id:1, emailId:1}}

如何在现有领域对象中存储此类数据?

您必须自己解析JSON才能设置链接。根据您的描述,不清楚您的用户和电子邮件是否已经在域中,但如果是这样,我会这样做:

class User{
  @PrimaryKey
  private int id;
  private Email email;
}

class Email{
  @PrimaryKey
  private int id;
  private String address;
}


JSONObject json = new JSONObject("{id:1, emailId:1}");

realm.beginTransaction();
User user = realm.where(User.class).equalTo("id", json.getInt("id")).findFirst();
Email email = realm.where(Email.class).equalTo("id", json.getInt("emailId")).findFirst();
user.setEmail(email);
realm.commitTransaction();

谢谢你的回答。我没有解释我不能保证任何一个对象已经在领域中。因此,我只能在我肯定知道对象已经在域中的情况下使用您提供的答案。根据JSON的组织方式,如果您使用Realm.createOrUpdateFromJson()插入用户/电子邮件对象,然后运行上述操作,您仍然可以使用我的答案。