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)
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. –
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
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? –