1

Моя проблема заключается в следующем: Когда я открываю фрагмент диалога, я отправляю области и области из операции в фрагмент диалога. Я всегда отправляю различные результаты в области диалога в фрагмент диалога, в зависимости от того, что я нажимаю в действии. Это код в диалоговом фрагменте, где я получить область и realmResults от деятельности, когда я нажимаю, чтобы открыть диалоговый фрагмент:Android как сохранить результаты в реальном времени с помощью onSaveInstanceState для поворота экрана

public void setChangeNoteListener(ChangeNoteListener mChangeNoteListener, RealmResults<Drop> realmResults, Realm realm) { 
     mNotelistener = mChangeNoteListener; 
     mRealmResolts = realmResults; 
     mRealm = realm; 
    } 

После того, как я получаю их, я использую их для показа некоторых данных в диалоговом фрагменте.

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

Обратите внимание, что в результатах области не только один элемент, но и больше предметов.

EDIT: откладывает дату из области с

@Override 
    public void onSaveInstanceState(Bundle outState) { 
     Bundle argumetns = getArguments(); 
     int position = argumetns.getInt("POSITION"); 
     outState.putString("myTitle", String.valueOf(mRealmResolts.get(position).getWhat())); 
     outState.putString("myNote", String.valueOf(mRealmResolts.get(position).getWhat_note())); 
     super.onSaveInstanceState(outState); 
    } 

Когда я загрузить приложение я загрузить приложение, как это:

public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 
     super.onViewCreated(view, savedInstanceState); 

     mBtnClose = (ImageButton) view.findViewById(R.id.btn_close_note); 
     mBtnDelete = (ImageButton) view.findViewById(R.id.dialog_btn_delete_note); 
     mEditTextTitle = (EditText) view.findViewById(R.id.dialog_text_naslov); 
     mEditTextNote = (EditText) view.findViewById(R.id.dialog_text_note); 
     mBtnEdit = (Button) view.findViewById(R.id.dialog_btn_edit); 
     mBtnCompleted = (Button) view.findViewById(R.id.dialog_btn_completed); 
     mBtnSave = (Button) view.findViewById(R.id.dialog_btn_save); 
     mBtnForward = (ImageButton) view.findViewById(R.id.dialog_btn_forward); 
     mBucketNoteTime = (BucketPickerView) view.findViewById(R.id.bpv_date_in_note); 
     mBucketNoteTimeNonSelected = (BucketPickerView_Unselected) view.findViewById(R.id.bpv_date_in_note_unselected); 
     mSwitchButton = (Switch) view.findViewById(R.id.switchButtonNote); 
     mSwitchChangeDate = (Switch) view.findViewById(R.id.switchChangeDate); 
     mSwitchNoteText = (TextView) view.findViewById(R.id.switchTextAbboveNote); 
     dialogPickerButtonNote = (ImageView) view.findViewById(R.id.dialog_picker_button_note); 


     mBtnClose.setOnClickListener(this); 
     mBtnDelete.setOnClickListener(this); 
     mBtnEdit.setOnClickListener(this); 
     mBtnCompleted.setOnClickListener(this); 
     mBtnSave.setOnClickListener(this); 
     mBtnForward.setOnClickListener(this); 
     dialogPickerButtonNote.setOnClickListener(this); 

     if (savedInstanceState != null) { 
      Log.d("realmtest", "onViewCreated: prvi"); 
      String mojStringTitle = savedInstanceState.getString("myTitle"); 
      String mojStringNote = savedInstanceState.getString("myNote"); 
      mEditTextTitle.setText(mojStringTitle); 
      mEditTextNote.setText(mojStringNote); 
      buttonWhenSaveVisibility(); 
      setTitleNoteTextToDialogNote(); 
     } 
     else { 
      buttonWhenSaveVisibility(); 

      setTitleNoteTextToDialogNote(); 
     } 
    } 

App помялся, когда я повернуть screan и и методы вызова setTitleNoteTextToDialogNote () в этой строке кода (когда я пытаюсь получить данные из области).

 mEditTextTitle.setText(mRealmResolts.get(position).getWhat()); 

Вот ошибка:

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'io.realm.RealmModel io.realm.RealmResults.get(int)' on a null object reference 
         at com.petar.android.simplenote.DialogNote.setTitleNoteTextToDialogNote(DialogNote.java:231) 
         at com.petar.android.simplenote.DialogNote.onViewCreated(DialogNote.java:134) 
         at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1127) 
         at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1290) 
         at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1272) 
         at android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:2149) 
         at android.support.v4.app.FragmentController.dispatchActivityCreated(FragmentController.java:201) 
         at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:600) 
         at android.support.v7.app.AppCompatActivity.onStart(AppCompatActivity.java:178) 
         at com.petar.android.simplenote.ActivityMain.onStart(ActivityMain.java:296) 
         at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1248) 
         at android.app.Activity.performStart(Activity.java:6696) 
         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2628) 
         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726)  
         at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:4519)  
         at android.app.ActivityThread.-wrap19(ActivityThread.java)  
         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1483)  
         at android.os.Handler.dispatchMessage(Handler.java:102)  
         at android.os.Looper.loop(Looper.java:154)  
         at android.app.ActivityThread.main(ActivityThread.java:6119)  
         at java.lang.reflect.Method.invoke(Native Method)  
         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)  
         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)  
+0

Прежде всего, вам нужно будет знать, какие функции вызываются при изменении ориентации. Это функции, которые называются: onPause | onSaveInstanceState | onStop | onCreate | onStart | onResume. Во-вторых, какая ошибка вы получаете? Я предполагаю, что что-то называется функциями, которые я только что упомянул, которые подавляют ваше приложение - возможно, вы вызываете то, что не было инициализировано. Хорошей идеей было бы создать класс и расширить приложение - там вы должны инициализировать свою базу данных в реальном времени и каждый раз, когда вам нужно что-то, что вы могли бы назвать через этот класс, который всегда является init. –

+0

Приложение разваливается, когда я хочу получить данные из базы данных realm, потому что realmResults не существует. Могу ли я сохранить reamResult в onsaveinstantstate, как я бы сделал со строкой, а затем отменил результаты области, когда меняю ориентацию. – beginner

+0

Является ли эта база данных инициализирована? Способ убедиться, что он всегда будет инициализирован тем, что я упомянул выше, - через класс, который расширяет приложение. Не могли бы вы поделиться журналом ошибок? –

ответ

0

RealmResults<T> представляет результаты запроса вы получаете от экземпляра Realm.

Realm - это база данных. Он хранит вещи. Это решение настойчивости.

Если в Царстве есть что-то, то это означает, что вам не нужно сохранять его в onSaveInstanceState(), потому что он уже находится в файле Realm.

Вы должны просто воссоздать RealmResults<T> с тем же параметром sort, и все должно быть хорошо.

Кроме того, найдите свою ошибку в любых вызовах setChangeNoteListener и не инициализируйте RealmResults.

+0

Я думал об этом решении, но у меня так много разных вариаций результатов в области. Все они зависят от того, что я нажимаю в действии, а затем отправляю эту опцию сортировки на фрагмент диалога. Я попробую это, однако у меня будет много условий, чтобы воссоздать realmresulsts с правильной сортировкой iptions. – beginner

+0

Вы должны сохранить выбранное условие сортировки, то – EpicPandaForce

+1

Я сделал так, как вы сказали, и его работа. Я сохранил сортировку в общем предпочтении, а затем я просто воссоздал realmResults. – beginner