2012-09-13 4 views
0

공유 미리보기를 사용하여 토글 버튼의 ​​상태를 저장합니다. 토글 버튼이 체크되어 있으면 "ON"하고, 토글 버튼을 체크하지 않으면 "OFF"합니다. 당신이 체크에있는 토글 버튼 내가 뭐하는 거지 경우 그 코드에서 볼 수 있듯이 하지만 상태를 retriveing하고 때, 항상 여기 "ON"반환 코드공유 우선권이 데이터를 저장하지 않습니다.

SharedPreferences.Editor shfEditMessageSMS; 
SharedPreferences shfResponderMessage; 
shfResponderMessage=getSharedPreferences("MESSAGE", Context.MODE_PRIVATE); 
shfEditMessageSMS=shfResponderMessage.edit(); 

toggleStatus=(ToggleButton)findViewById(R.id.toggleButtonStatus); 

toggleStatus.setOnClickListener(new View.OnClickListener() 
{   
    public void onClick(View v) 
    { 
     // TODO Auto-generated method stub 
     if(((ToggleButton)v).isChecked()) 
     { 
      shfEditMessageSMS.putString("SMSRESPONDERONOFF", "ON"); 
      shfEditMessageSMS.commit(); 

      showNotification("ON");     
     } 
     else 
     { 
      shfEditMessageSMS=shfResponderMessage.edit(); 
      shfEditMessageSMS.putString("SMSRESPONDERONOFF", "OFF"); 
      shfEditMessageSMS.commit(); 

      showNotification("OFF"); 
      String SMSResponderOnOrOff=shfResponderMessage.getString("SMSRESPONDERONOFF", "NONE"); 
      Log.i("SMS Responder on click "+SMSResponderOnOrOff," "); 
     } 
    } 
}); 

입니다

shfEditMessageSMS.putString("SMSRESPONDERONOFF", "OFF"); 
shfEditMessageSMS.commit(); 

로그를 사용하여 검색하고 인쇄 할 때

String SMSResponderOnOrOff=shfResponderMessage.getString("SMSRESPONDERONOFF", "NONE"); 
Log.i("SMS Responder on click "+SMSResponderOnOrOff," "); 

항상 로그에 "켜기"를 표시합니다.

무엇이 문제 일 수 있습니다. 덕분에 .

+0

두 가지. 먼저,'commit()'에 의해 반환 된 값을 검사하여 값이 실제로 커밋되었는지 확인하십시오. 둘째, 문자열 값 "ON"과 "OFF"대신에'boolean'을 사용하지 않을까요? – theisenp

답변

1

나는 내 응용 프로그램에서 같은 것을 구현했습니다. 문제를 해결하는 데 도움을 줄 수 있습니다. 코드에서 수행 한 실수를 알아낼 수는 없었습니다. 아래 코드를 참조하십시오.

0

비슷한 문제가 있지만 문자열 배열을 저장할 때 발생했습니다. 각 저장시 변수를 증가시켜 문제를 "해결"했습니다.

public void saveProfileList(Context context) { 
      SharedPreferences sharedprefs = context.getSharedPreferences(PREFS_NAME,Activity.MODE_PRIVATE); 
      Editor editor = sharedprefs.edit(); 
      editor.putStringSet("vpnlist", profiles.keySet()); 

      // For reasing I do not understand at all 
      // Android saves my prefs file only one time 
      // if I remove the debug code below :(
      int counter = sharedprefs.getInt("counter", 0); 
      editor.putInt("counter", counter+1); 
      editor.apply(); 


    } 

안드로이드 코드의 어딘가에 항상 sharedpreferences가 변경된 것으로 감지되지 않는 것 같습니다.

+0

그것은 내 문제를 해결하지 못합니다. – kamal

0

값을 올바르게 다시 읽으려면 시간이 오래 걸리는 모호한 기억이 있습니다. 값을 캡슐화하여이를 해결할 수 있으며 변수도 검색 할 수 있습니다. 또한 UI 스레드를 방해하지 않으므로 commit() 대신 apply()을 사용하는 것이 좋습니다. 따라서 다음과 같이 제안합니다.

public class Preferences { 
    private SharedPreferences mPrefs; 
    private static final String KEY = "SMSRESPONDERONOFF"; 
    private String mValue; 

    public Preferences(SharedPreferences prefs) { 
     mPrefs = prefs; 
    } 

    public String getValue() { 
     if (mValue == null) { 
      mValue = mPrefs.getString(KEY, "NONE"); 
     } 

     return mValue; 
    } 

    public void setValue(String value) { 
     mValue = value; 
     mPrefs.edit().putString(KEY, value).apply(); 
    } 
} 
관련 문제