2016-09-20 89 views
0

如果它已经存在于领域数据库中,如何更新值; 我试图构建一个应用程序来显示一些着名作者的引用, 该应用程序将有一些作者,每个作者将有一些报价, 当我第一次运行该应用程序时,它完美运行,但是当我尝试运行它时再次显示我的值已经存在错误。
这是我的模型类如果值已经存在,如何更新领域数据库

public class Author extends RealmObject { 
@PrimaryKey 
private String name; 
private RealmList<Quotes>quote; 

public String getName() { 
    return name; 
} 

public void setName(String name) { 
    this.name = name; 
} 

public Author() { 

} 

public RealmList<Quotes> getQuote() { 
    return quote; 
} 

public void setQuote(RealmList<Quotes> quote) { 
    this.quote = quote; 
} 

public Author(String name, RealmList<Quotes> quote) { 

    this.name = name; 
    this.quote = quote; 

} 

}

public class Categories extends RealmObject { 
@PrimaryKey 
private String category; 

public String getCategory() { 
    return category; 
} 

public void setCategory(String category) { 
    this.category = category; 
} 

public Categories() { 

} 

public Categories(String category) { 

    this.category = category; 
} 

}

public class Quotes extends RealmObject { 
private String Quote; 
private Categories category; 

public Categories getCategory() { 
    return category; 
} 

public void setCategory(Categories category) { 
    this.category = category; 
} 

public String getQuote() { 
    return Quote; 
} 

public void setQuote(String quote) { 
    Quote = quote; 
} 

public Quotes() { 

} 

public Quotes(Categories category, String quote) { 

    this.category = category; 
    Quote = quote; 
} 

}

这是我mainActivity,我将数据库和得到的错误:值已存在

public class MainActivity extends AppCompatActivity { 
Realm mRealm; 
Categories wisdom; 
Categories fear; 
Categories motivation; 
Categories life; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    RealmConfiguration configuration=new RealmConfiguration.Builder(this).build(); 
    Realm.setDefaultConfiguration(configuration); 
    mRealm=Realm.getDefaultInstance(); 

    mRealm.beginTransaction(); 


    wisdom=mRealm.createObject(Categories.class); 
    fear=mRealm.createObject(Categories.class); 
    wisdom.setCategory("wisdom"); 
    fear.setCategory("fear"); 
    life.setCategory("Life"); 
    motivation.setCategory("Motivation"); 

    Author john_green=mRealm.createObject(Author.class); 
    john_green.setName("John Green"); 

    Quotes john_green_1=mRealm.createObject(Quotes.class); 
    john_green_1.setQuote("My thoughts are stars I can't fathom into constellations."); 
    john_green_1.setCategory(motivation); 
    john_green.getQuote().add(john_green_1); 

    Quotes john_green_2=mRealm.createObject(Quotes.class); 
    john_green_2.setQuote("What is the point of being alive if you don’t at least try to do something remarkable?"); 
    john_green_2.setCategory(motivation); 
    john_green.getQuote().add(john_green_2); 

    mRealm.commitTransaction(); 
} 

}

+0

如果你的对象有一个主键,你可以用相同的PK对象调用'copyToRealmOrUpdate()'。否则,你可以使用@quidproquo的答案。 – beeender

回答

1

尝试找到它首先,如果没有找到它(返回null)创建对象。

mRealm=Realm.getDefaultInstance(); 
mRealm.executeTransaction(new Realm.Transaction() { 
    @Override 
    public void execute(Realm realm) { 
     Category wisdom = realm.where(Categories.class).equalTo("category", "wisdom").findFirst(); 
     if(wisdom == null) { 
      wisdom = realm.createObject(Categories.class); 
      wisdom.setCategory("wisdom"); 
     } 
     //more code 
    } 
}); 
+0

我是否应该为每个作者和每个引用对象执行相同操作? –

相关问题