2017-10-17 5 views
-4

부울을 공유 환경 설정에 true 값으로 저장하려고하는데 로그 할 때 false를 반환하는 것을 계속 볼 수 있습니다 값. 아래 코드를 보시고이 코드가 단편에 있음을 명심하십시오.내 부울을 공유 환경 설정에서 true로 저장할 것을 기대하고 있지만 항상 false로 저장합니다.

SharedPreferences AppPreferences = getActivity().getSharedPreferences("myPrefs", Activity.MODE_PRIVATE); 
     boolean propertyManagerLoggedIn = AppPreferences.getBoolean(PROPERTYMANAGER_LOGGEDIN, false); 

     if(!propertyManagerLoggedIn) 
     { 
     SharedPreferences.Editor editor = AppPreferences.edit(); 
     transitionInterface.showDashboardIcons(); 
     AppPreferences.edit().putBoolean("PROPERTYMANAGER_LOGGEDIN", true); 
     editor.commit(); 
     //boolean vlaue = prefs.getbooleanflag(context, false); 
     Log.d("tag",""+propertyManagerLoggedIn); 

     } 
    else 
     { 

     Log.d("tag",""+propertyManagerLoggedIn); 
     } 

아래 당신에게 반환되고 내 AppPreferences 클래스

public final static String PROPERTYMANAGER_LOGGEDIN = "PROPERTYMANAGER_LOGGEDIN"; 

    public static boolean propertyManagerLoggedn(Context context) 
    { 
     TinyDB settings = new TinyDB(context); 
     return settings.getBoolean(AppPreferences.PROPERTYMANAGER_LOGGEDIN); 
    } 

답변

2

Editoredit()를 호출 할 때마다의 코드 관련 라인입니다. 따라서 문서를

당신은 환경 설정에서 데이터에 수정을하고 원자 적 된 SharedPreferences 객체에 다시 그 변경 사항을 적용 할 수있는 이러한 환경 설정을위한 새로운 에디터를 작성합니다.

그래서 당신이 중 하나를 수행 할 수 있습니다

AppPreferences.edit().putBoolean("PROPERTYMANAGER_LOGGEDIN", true).commit(); 

또는

editor.putBoolean("PROPERTYMANAGER_LOGGEDIN", true); 
editor.commit(); 

그러나 다른 한편으로 인스턴스에 putBooleancommit를 호출하면 아마 당신은 커밋 호출

0

도움이되지 않습니다 다른 인스턴스에서. 기본적으로 AppPreferences.edit()은 새로운 인스턴스를 제공합니다.

AppPreferences.edit().putBoolean("PROPERTYMANAGER_LOGGEDIN", true); 

이것은 부울 값을 넣는 또 다른 인스턴스입니다.

작성한 동일한 인스턴스를 사용하십시오. 코드는 다음과 같아야합니다.

SharedPreferences.Editor editor = AppPreferences.edit(); 
     transitionInterface.showDashboardIcons(); 
     editor.putBoolean("PROPERTYMANAGER_LOGGEDIN", true); 
     editor.commit(); 
+0

감사합니다. 또한 앱 환경 설정에서 선언하는 방식이 잘못되었다고 생각합니다. 그것을 선언 할 수있는 올바른 방법은 무엇입니까? – Zidane