2016-09-20 1 views
0

как обновить значения, если они уже существуют в базе данных области; Я пытаюсь создать приложение, чтобы показать некоторые цитаты от известных авторов, приложение будет иметь некоторых авторов, и каждый автор будет иметь некоторые цитаты, , когда я запускаю приложение в первый раз, когда он работает отлично, но когда я пытаюсь запустить его снова он показывает, что значения уже существуют.
это моя модель классыкак обновить базу данных realm, если значения уже существуют

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 где я установил DataBase и получаю ошибку: значение уже существует

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

Если объект имеет первичный ключ, вы можете просто позвонить 'copyToRealmOrUpdate()' с объектом с тем же ПК. В противном случае вы можете просто использовать ответ @quidproquo. – beeender

ответ

1

Попробуйте найти его первым, и если он не находит его (возвращает нулевое значение) создать объект.

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

Должен ли я делать то же самое для каждого автора и каждого объекта Quote? –

Смежные вопросы