Android Realm и ссылка на нулевой объект во фрагменте - PullRequest
0 голосов
/ 27 августа 2018

Я ищу ответ на мою проблему.Это мой первый контакт с базой данных Realm, и у меня возникла проблема с нулевой ссылкой на объект во фрагменте при сохранении данных.Кто-нибудь знает, что я делаю неправильно?

Вспомогательный метод:

public void saveTask(final String text, final String date, final String time ) {
    realm.executeTransactionAsync(new Realm.Transaction() {
        @Override
        public void execute(Realm bgRealm) {
            Task task = bgRealm.createObject(Task.class);
            task.setText(text);
            task.setDate(date);
            task.setTime(time);
        }
    }, new Realm.Transaction.OnSuccess() {
        @Override
        public void onSuccess() {
            // Transaction was a success.
            Log.d(TAG, "ON_SUCCESS: Data Written Successfully");
        }
    }, new Realm.Transaction.OnError() {
        @Override
        public void onError(Throwable error) {
            // Transaction failed and was automatically canceled.
            Log.d(TAG, "ON_ERROR: Error");
        }
    });

}

Метод OnClick во фрагменте:

@OnClick(R.id.save_button)
public void onClickSave() {

    realmHelper.saveTask(title_text.getText().toString().trim(), date_text.getText().toString().trim(), time_text.getText().toString().trim());
}

Код внутри onCreateView:

    ButterKnife.bind(this, view);

    ((MainActivity) getActivity()).hideFloatingActionButton();

    Realm.init(getActivity());
    RealmConfiguration configuration = new RealmConfiguration
            .Builder()
            .deleteRealmIfMigrationNeeded()
            .build();
    realm = Realm.getInstance(configuration);

Я пробовал решение с полями textview внутри метода onClick, но все равно.

1 Ответ

0 голосов
/ 27 августа 2018

Из вашего метода OnClick во фрагменте я вижу, что у вас есть класс помощника области, для которого вы создали экземпляр с именем realmHelper.Поскольку вы используете область асинхронно, я предлагаю вам передать созданный объект области в вспомогательный метод или заново создать область в вспомогательном методе или классе.

Передача экземпляра области вспомогательному методу

public void saveTask(Realm realm, final String text, final String date, final String time ) {
    realm.executeTransactionAsync(new Realm.Transaction() {
        @Override
        public void execute(Realm bgRealm) {
            Task task = bgRealm.createObject(Task.class);
            task.setText(text);
            task.setDate(date);
            task.setTime(time);
        }
    }, new Realm.Transaction.OnSuccess() {
        @Override
        public void onSuccess() {
            // Transaction was a success.
            Log.d(TAG, "ON_SUCCESS: Data Written Successfully");
        }
    }, new Realm.Transaction.OnError() {
        @Override
        public void onError(Throwable error) {
            // Transaction failed and was automatically canceled.
            Log.d(TAG, "ON_ERROR: Error");
        }
    });

}

Инстанцирующая область в вспомогательном методе

public void saveTask(Context context, final String text, final String date, final String time ) {
    Realm.init(context);
    RealmConfiguration configuration = new RealmConfiguration
        .Builder()
        .deleteRealmIfMigrationNeeded()
        .build();
    Realm realm = Realm.getInstance(configuration);
    realm.executeTransactionAsync(new Realm.Transaction() {
        @Override
        public void execute(Realm bgRealm) {
            Task task = bgRealm.createObject(Task.class);
            task.setText(text);
            task.setDate(date);
            task.setTime(time);
        }
    }, new Realm.Transaction.OnSuccess() {
        @Override
        public void onSuccess() {
            // Transaction was a success.
            Log.d(TAG, "ON_SUCCESS: Data Written Successfully");
        }
    }, new Realm.Transaction.OnError() {
        @Override
        public void onError(Throwable error) {
            // Transaction failed and was automatically canceled.
            Log.d(TAG, "ON_ERROR: Error");
        }
    });

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...