1

내 문제는 다음과 같습니다. 대화 상자 조각을 열면 작업 영역과 영역 결과가 대화 상자 조각에 전송됩니다. 나는 항상 활동에서 클릭하는 것에 따라 다른 영역 결과를 대화 상자 조각에 보냅니다. 내가 그들을받은 후안드로이드 화면 회전을 위해 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)  
+0

우선 방향 변경시 어떤 함수가 호출되는지 알아야합니다. 다음은 호출되는 함수입니다. onPause | onSaveInstanceState | onStop | onCreate | onStart | onResume. 둘째, 오류는 무엇입니까? 아마도 방금 언급 한 함수에 뭔가가 호출되어 응용 프로그램이 손상된 것 같습니다. 아마 초기화되지 않은 것을 호출했을 것입니다. 클래스를 생성하고 응용 프로그램을 확장하는 것이 좋습니다. 영역 데이터베이스를 초기화하고 해당 클래스를 통해 호출 할 수있는 무언가가 필요할 때마다 항상 init이어야합니다. –

+0

realmResults가 없기 때문에 영역 데이터베이스에서 데이터를 가져 오려고 할 때 응용 프로그램이 손상됩니다. reamResult를 onsaveinstantstate에 저장할 수 있습니까? 문자열로 처리 한 다음 방향을 변경할 때 영역 결과를 되돌릴 수 있습니까? – beginner

+0

해당 데이터베이스가 초기화 되었습니까? 그것은 항상 내가 위에서 언급 한 것 - 그것이 응용 프로그램을 확장하는 클래스를 통해 초기화 될 것이라는 것을 확신 할 수있는 방법입니다. 오류 로그를 공유 할 수 있습니까? –

답변

0

RealmResults<T> 쿼리 당신이 영역 인스턴스에서 얻는 결과를 나타냅니다 : 여기

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

는 오류입니다.

영역은 데이터베이스입니다. 그것은 물건을 저장합니다. 지속성 솔루션입니다.

영역에 무언가가있는 경우 이는 이미 영역 파일에 있기 때문에 onSaveInstanceState()에 유지할 필요가 없음을 의미합니다.

동일한 sort 매개 변수를 사용하여 RealmResults<T>을 다시 작성하면됩니다.

또한 setChangeNoteListener이 무엇이든지 호출하여 버그를 검색하고 RealmResults를 초기화하지 않습니다.

+0

이 솔루션에 대해 생각하고 있었지만 영역 결과가 매우 다양합니다. 그것들은 모두 내가 활동에서 클릭하는 것에 달려 있습니다. 그런 다음 정렬 옵션을 대화 상자 조각으로 보냅니다. 나는 이것을 시도 할 것이다, 그러나 만일 내가 정확한 조건 정렬을 가진 realmresulsts를 재현하기위한 많은 조건을 가질 것이다 – beginner

+0

당신이 선택한 정렬 조건을 저장해야한다. – EpicPandaForce

+1

나는 당신이 말한 것처럼 그 일을했다. 공유 우선 순위로 정렬을 저장 한 다음 realmResults를 다시 작성했습니다. – beginner

관련 문제