簡體   English   中英

領域正在使用舊對象,而不是對其進行更新

[英]Realm is using old object, not updating it

我正在使用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();

}

這是在片段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

 }

第二個片段開始查詢數據時,即在第一個片段的onClick事件發生之前(因為兩個片段大致同時創建)。

您需要告知第二個片段第一個片段中的數據已更改。 有很多方法可以實現這一目標,例如:

  • 接口
  • 事件總線(Otto,EventBus)
  • 反應式編程

可能還有很多,但是其中之一就足夠了;)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM