2014-11-19 3 views
2

부울을 SharedPreferences에서 검색하려고하는데 부울은 항상 거짓입니다. 코드 :공유 환경 설정에서 부울 값을 가져올 수 없습니다. Android

SharedPreferences prefs; 
    boolean crosshairIsShown; 
... 
prefs = getSharedPreferences("Weapon1", MODE_PRIVATE); 
crosshairIsShown = prefs.getBoolean("crosshairIsShown", false); 
crosshair(); 
.. 
crosshair.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       if (crosshairIsShown == false) { 
        crosshairIsShown = true; 
        crosshair1.setVisibility(View.VISIBLE); 
        crosshair2.setVisibility(View.VISIBLE); 
        crosshair.setImageResource(R.drawable.crosshair_enabled); 
        SharedPreferences.Editor editor = prefs.edit(); 
        editor.putBoolean("crosshairIsShown", true); 
        editor.commit(); 
       } else { 
        crosshairIsShown = false; 
        crosshair1.setVisibility(View.INVISIBLE); 
        crosshair2.setVisibility(View.INVISIBLE); 
        crosshair.setImageResource(R.drawable.crosshair_disabled); 
        SharedPreferences.Editor editor = prefs.edit(); 
        editor.putBoolean("crosshairIsShown", false); 
        editor.commit(); 
       } 

      } 
     }); 
... 
private void crosshair() { 
     if (crosshairIsShown == false) { 
      crosshair1.setVisibility(View.VISIBLE); 
      crosshair2.setVisibility(View.VISIBLE); 
      crosshair.setImageResource(R.drawable.crosshair_enabled); 

     } else { 
      crosshair1.setVisibility(View.INVISIBLE); 
      crosshair2.setVisibility(View.INVISIBLE); 
      crosshair.setImageResource(R.drawable.crosshair_disabled); 
     } 

    } 

왜 이런 일이 발생합니까? 나는 무엇을 잘못 했는가? 방법 아래

+1

이유가 있는지 모르겠지만 십자선 (더 나은 이름 : setCrosshair)과 onClick의 논리가 바뀌 었는지 알 수 없습니다. 또한 모든 것을 다시 코딩하는 대신 onClick에서 setCrosshair를 호출하는 것이 좋습니다. – greenapps

답변

1

사용이 싶어서 "false"를 "키"를

부울 플래그 = getPreferences() getBoolean (키, false)를위한

@Override 
public boolean getBooleanValuesFromPreferences(String key) { 
    boolean data = getPreferences().getBoolean(key, false); 
    return data; 
} 
+0

이것이 명백한 것으로 밝혀지면 죄송합니다. 그러나 OP의 방식과 다른 점을 보지 못했습니다. 이것에 대해 더 설명해 주시겠습니까? – ridsatrio

+0

왜 더 낫습니까? OP 코드가 작동하지 않는 이유는 무엇입니까? –

+0

공유 환경 설정에 저장된 키를 직접 반환합니다. –

0

사용 getBoolean;.

+0

왜 그게 더 낫습니까? OP 코드가 작동하지 않는 이유는 무엇입니까? –

관련 문제