1

Mon problème est le suivant: Lorsque j'ouvre un fragment de dialogue, j'envoie des résultats de domaine et de domaine depuis l'activité jusqu'au fragment de la boîte de dialogue. J'envoie toujours différents résultats de domaine au fragment de dialogue, selon ce que je clique dans l'activité. Ceci est du code dans le fragment de dialogue où je reçois royaume et realmResults de l'activité, quand je clique pour ouvrir fragment de dialogue:Android comment enregistrer les résultats du domaine avec onSaveInstanceState pour la rotation de l'écran

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

Après que je les reçois, je les utiliser pour montrer certaines données dans le fragment de dialogue.

Problème lorsque je change d'orientation de l'application, l'application est écrasée car je ne peux plus utiliser les résultats du domaine. Ma question est, comment enregistrer les résultats du domaine entier avec onSaveInstanceStat et quand l'orientation de l'application change, pour utiliser à nouveau ce domaine.

Notez que dans les résultats de domaine n'est pas seulement un élément, il y a plus d'éléments.

EDIT: je sauvegarde la date du royaume avec

@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); 
    } 

Lorsque je charge app je charge l'application comme ceci:

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 se faire écraser quand je fais tourner screan et et la méthode d'appel setTitleNoteTextToDialogNote () sur cette ligne de code (quand j'essaie d'obtenir des données du royaume).

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

Voici l'erreur:

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

Tout d'abord, vous devrez savoir quelles fonctions sont appelées lorsque l'orientation change. Ce sont les fonctions qui sont appelées: onPause | onSaveInstanceState | onStop | onCréer | onStart | onResume. Deuxièmement, quelle est l'erreur que vous obtenez? Je suppose que quelque chose est appelé sur les fonctions que je viens de mentionner qui écrase votre application - probablement vous appelez quelque chose qui n'a pas été initialisé. Une bonne idée serait de créer une classe et d'étendre l'application - là vous devriez initialiser votre base de données de domaine et chaque fois que vous avez besoin de quelque chose que vous pourriez appeler à travers cette classe, qui est toujours init. –

+0

L'application est écrasée lorsque je souhaite obtenir des données de la base de données de domaine, car realmResults n'existe pas. Puis-je sauvegarder reamResult dans onsaveinstantstate comme je le ferais avec une chaîne, puis retirer des résultats de domaine lorsque je change d'orientation. – beginner

+0

Cette base de données est-elle initialisée? Un moyen d'être sûr qu'il va toujours être initialisé ce que j'ai mentionné ci-dessus - à travers la classe qui étend Application. Pourriez-vous partager le journal des erreurs? –

Répondre

0

RealmResults<T> représente la requête que vous obtenez les résultats de l'instance de royaume.

Realm est une base de données. Il stocke les choses. C'est une solution de persistance.

S'il y a quelque chose dans le domaine, cela signifie que vous ne devez pas le conserver dans onSaveInstanceState(), car il se trouve déjà dans le fichier Realm.

Vous devriez simplement recréer le RealmResults<T> avec le même paramètre sort et cela devrait aller.

De même, recherchez votre bogue dans tout appel setChangeNoteListener et n'initialise pas les RealmResults.

+0

Je pensais à cette solution, mais j'ai tellement de variations différentes de résultats de domaine. Ils dépendent tous de ce que je clique dans l'activité, puis j'envoie cette option de tri au fragment de dialogue. Je vais essayer ceci, cependant j'aurai beaucoup de si les conditions pour recréer realmresulsts avec des iptions correctes de tri – beginner

+0

Vous devriez enregistrer votre condition de tri choisie puis – EpicPandaForce

+1

J'ai fait comme vous l'avez dit et son fonctionnement. J'ai sauvegardé le tri dans la préférence partagée et ensuite je recréer juste realmResults. – beginner