Как удалить с базы данных Realm 3.5.0

289
23 июля 2017, 09:26

Добрый день. У меня не получается удалить из базы данных нужную запись, которая была ранее добавлена.

    public class Receive extends RealmObject {
    private int ID;
    private String NAME;
    public int getID() { return ID; }
    public void setID(int ID) { this.ID = ID; }
    public String getNAME() { return NAME; }
    public void setNAME(String NAME) { this.NAME = NAME; }
}

Я создал приватный метод, который отвечает за удаления.

private void deleteRealm(int deleteId) {
    final RealmResults<Receive> results = realm.where(Receive.class).equalTo("ID", deleteId).findAll();
    realm.executeTransaction(new Realm.Transaction() {
        @Override
        public void execute(Realm realm) {
            results.deleteFromRealm(1); // Что сюда нужно передать, я не знаю.
        }
    });
}

Этот метод я привязал к обработчику.

Delete = new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            int editId = v.getId();
            deleteRealm(SityIDs[editId]); //Передаю ID записи.
        }
    };

Программа выдает ошибку, она связана в первую очередь с методом, который отвечает за удаление, после лог показывает, что ошибка возникала в обработчику Delete = new View.OnClickListener()

Я так-же пробовал этот метод

final RealmResults<Dog> results = realm.where(Dog.class).findAll();
realm.executeTransaction(new Realm.Transaction() {
    @Override
    public void execute(Realm realm) {
        // remove single match
        results.deleteFirstFromRealm();
        results.deleteLastFromRealm();
        // remove a single object
        Dog dog = results.get(5); // Но я не знаю, что сюда нужно передать
        dog.deleteFromRealm();
        // Delete all matches
        results.deleteAllFromRealm();
    }
});

Ошибка

07-22 20:59:41.251 25759-25759/ru.profgrammist.javaandroid E/AndroidRuntime: FATAL EXCEPTION: main
                                                                             Process: ru.profgrammist.javaandroid, PID: 25759
                                                                             Theme: themes:{}
                                                                             java.lang.NullPointerException: Attempt to invoke virtual method 'io.realm.RealmQuery io.realm.Realm.where(java.lang.Class)' on a null object reference
                                                                                 at ru.profgrammist.javaandroid.Zakladka.deleteRealm(Zakladka.java:104)
                                                                                 at ru.profgrammist.javaandroid.Zakladka.access$100(Zakladka.java:26)
                                                                                 at ru.profgrammist.javaandroid.Zakladka$2.onClick(Zakladka.java:69)
                                                                                 at android.view.View.performClick(View.java:5204)
                                                                                 at android.view.View$PerformClick.run(View.java:21156)
                                                                                 at android.os.Handler.handleCallback(Handler.java:739)
                                                                                 at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                                 at android.os.Looper.loop(Looper.java:148)
                                                                                 at android.app.ActivityThread.main(ActivityThread.java:5466)
                                                                                 at java.lang.reflect.Method.invoke(Native Method)
                                                                                 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
                                                                                 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Answer 1

Прежде чем использовать реалм, нужно получить инстанс, т.е. примерно так:

public class MyActivity extends Activity {
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Realm realm = Realm.getDefaultInstance();
    try {
      // здесь используете realm...
    } finally {
      realm.close();
    }
  }
}

Ну или можно привязать это к жизненному циклу активити\фрагмента как-то так:

private Realm realm;
@Override
public void onResume() {
    realm = Realm.getDefaultInstance();
    super.onResume();
}
@Override
public void onPause() {
    realm.close();
    super.onPause();
}
READ ALSO
ввод данных в массив при помощи курсора

ввод данных в массив при помощи курсора

Здравствуйте, занимаюсь попытками создания крестиков-ноликовСейчас их ввод осуществляется путём указания индекса элемента массива

295
Удаление строки после /

Удаление строки после /

Например есть строка http://сайтру/уровень1/уровень2

233
Прорисовка drawable по клику

Прорисовка drawable по клику

Я создал свою реализацию ImageView и переопределил метод onDraw(Canvas canvas); Все работает, но я хочу чтоб при нажатии на Button, на моем полотне дополнительно...

274
CSS/HTML фреймворк для обычных страниц

CSS/HTML фреймворк для обычных страниц

Нужен CSS/HTML фреймворк для обычного контентаСуществует ли вообще что-то подобное? Как называются такие фреймворки? Постараюсь объяснить, что...

229