领域正在使用旧对象,而不是更新它

时间:2016-11-16 15:33:28

标签: java android realm

我使用Realm从Fragment 1中的EditText保存用户输入,并在Fragment 2的TextView中显示输入。当用户单击第一个Fragment中的按钮时,我需要在第二个Fragment中显示该文本。

一切似乎都很好,但每次我在我的应用程序中午餐时,在保存对象之前查询都会超出范围,旧的输入会在TextView中显示。

  • 当我输入一些输入时,旧文本已经保存并显示 在TextView中

以下是保存输入的方法,以及片段1中的OnClick方法:

public void setEmail() {
   Realm realm = getRealm();
   realm.beginTransaction();
   final Email emailInput = new Email();
   emailInput.setUsername(editEmail.getText().toString());

   realm.copyToRealmOrUpdate(emailInput);
   realm.commitTransaction();


}


@OnClick(R.id.btn_forgot)
public void onButtonClick() {

   setEmail();

}

。 这是在Fragment 2中查询和设置文本的方法:

public void getEmail() {
   Realm realm = getRealm();
   RealmQuery<Email> queryUser = realm.where(Email.class);
   Email resultEmail = queryUser.findFirst();

   resendEmailTxt = (AutoResizeTextView) getView().findViewById(R.id.resend_user_email);
   if (resendEmailTxt != null) {
       this.resendEmailTxt.setText(resultEmail.getUsername());
   }


}
@Override
public void onStart() {
   super.onStart();
   getEmail();


}

模特课:

public class Email extends RealmObject {

@PrimaryKey
public int id = 0;
private String username;

//Getters and setters here

 }

1 个答案:

答案 0 :(得分:0)

Second Fragment在数据启动时查询数据,也就是在第一个Fragment发生的onClick事件发生之前(因为两个片段大致同时创建)。

您需要通知第二个片段数据已在第一个片段中更改。有很多方法可以实现这一点,例如:

  • 接口
  • 活动巴士(Otto,EventBus)
  • 反应式编程

可能还有很多,但其中一个就够了;)