2017-10-04 4 views
-3

공유 환경 설정 값을 변경했지만 여전히 이전 환경 값을 반환합니다. 내가 뭘 놓치고 있니?SharedPreferences는 편집 후에도 동일한 값을 반환합니다.

이 코드는 사용자가 RecyclerView에서 항목을 클릭 할 때 실행됩니다. 따라서 첫 번째 클릭시 메시지 " this true"이 예상대로 표시됩니다. 그러나 두 번째 클릭에서도 나는 " this true"을 얻지 만, "this false"을 기대합니다.

SharedPreferences prefs = context.getSharedPreferences(MY_PREF, Context.MODE_PRIVATE); 
    boolean value = prefs.getBoolean(KEY_PREF, true); 
    if (value) { 
     Log.v(LOG_TAG, "this true"); 
     Log.v(LOG_TAG, "editing value.."); 
     SharedPreferences.Editor prefs = context.getSharedPreferences(MY_PREF, MODE_PRIVATE).edit(); 
     prefs.putBoolean(KEY_PREF, new_value); 
     prefs.apply(); 
    } else { 
     Log.v(LOG_TAG, "this false"); 
    } 
+0

'new_value'의 값은 무엇입니까? 어쩌면 대신'! value'를 저장해야합니다. 값을 토글합니다. –

답변

0

prefs.apply은 비동기입니다. 즉각적인 변경 사항을 볼 수 없습니다. 대신 동 기적으로 prefs.commit을 사용할 수 있습니다.

3

당신이 저장하고있는 것은 항상 true입니다. 그러므로 this false이 나타나지 않을 것입니다. 실제로 new_value은 할당되지 않은 것으로 선언되지 않으므로 코드가 컴파일되지 않습니다.

추신 : getSharedPreferences() 두 번째로 전화하는 것은 의미가 없습니다. if() 블록을 입력하기 전에 이미 prefs에 있습니다.

+0

예, 죄송합니다. 사실 나는 거기에 newValue를 넣습니다. –

+0

질문을 업데이트하십시오. –

+0

이것은 단지 코드 조각입니다. 나는 모두 선언하고 할당했습니다. –