내 문제는 다음과 같습니다. 대화 상자 조각을 열면 작업 영역과 영역 결과가 대화 상자 조각에 전송됩니다. 나는 항상 활동에서 클릭하는 것에 따라 다른 영역 결과를 대화 상자 조각에 보냅니다. 내가 그들을받은 후안드로이드 화면 회전을 위해 onSaveInstanceState로 영역 결과를 저장하는 방법
public void setChangeNoteListener(ChangeNoteListener mChangeNoteListener, RealmResults<Drop> realmResults, Realm realm) {
mNotelistener = mChangeNoteListener;
mRealmResolts = realmResults;
mRealm = realm;
}
, 난 대화 조각에서 일부 데이터를 보여주는를 사용 :이 내가 대화 조각을 열려면 클릭 할 때 내가 활동에서 영역 및 realmResults을 받게 대화 조각의 코드입니다.
문제는 앱 방향을 변경하면 더 이상 영역 결과를 사용할 수 없기 때문에 앱이 손상됩니다. 내 질문은 onSaveInstanceStat을 사용하여 전체 영역 결과를 저장하는 방법과 앱 방향이 변경되면 해당 영역 결과를 다시 사용하는 것입니다.
영역 결과는 하나의 항목 일뿐만 아니라 더 많은 항목이 있음에 유의하십시오.
는 편집 : (screan과 및 호출 방법 setTitleNoteTextToDialogNote를 회전 할 때
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();
}
}
앱이 깔린 얻을 : 내가 응용 프로그램을로드 할 때 나는 내가 다음과 같이 응용 프로그램을로드
@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);
}
와 영역에서 날짜를 저장)이 코드 줄에 (내가 영역에서 데이터를 가져 오려고 할 때).
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)
우선 방향 변경시 어떤 함수가 호출되는지 알아야합니다. 다음은 호출되는 함수입니다. onPause | onSaveInstanceState | onStop | onCreate | onStart | onResume. 둘째, 오류는 무엇입니까? 아마도 방금 언급 한 함수에 뭔가가 호출되어 응용 프로그램이 손상된 것 같습니다. 아마 초기화되지 않은 것을 호출했을 것입니다. 클래스를 생성하고 응용 프로그램을 확장하는 것이 좋습니다. 영역 데이터베이스를 초기화하고 해당 클래스를 통해 호출 할 수있는 무언가가 필요할 때마다 항상 init이어야합니다. –
realmResults가 없기 때문에 영역 데이터베이스에서 데이터를 가져 오려고 할 때 응용 프로그램이 손상됩니다. reamResult를 onsaveinstantstate에 저장할 수 있습니까? 문자열로 처리 한 다음 방향을 변경할 때 영역 결과를 되돌릴 수 있습니까? – beginner
해당 데이터베이스가 초기화 되었습니까? 그것은 항상 내가 위에서 언급 한 것 - 그것이 응용 프로그램을 확장하는 클래스를 통해 초기화 될 것이라는 것을 확신 할 수있는 방법입니다. 오류 로그를 공유 할 수 있습니까? –