2013-07-16 4 views
0

문제 : 활동 B는 항상 거짓을 반환하지만, 활동 A 내에서 동일한 KEY를 검사하면 결과가 true입니다. 왜 이런거야? 나는 KEY를 확인했다. 그것은 두 활동 모두에서 정확히 같다.Android - SharedPreference 오류

편집 : 귀하의 도움을 주신 모든 분들께 진심으로 감사드립니다. 그러나 제안을 이행 한 후에도 나는 여전히 운이 없었습니다.

ActivityA, extends Activity Implements OnGesturePerformedListener

//How methods are called... 
read(getApplicationContext(),"fav", posName); 
write(getApplicationContext(), "fav", posName, false); 
... 

public Boolean read(Context context, String name, String key) { 
    SharedPreferences sP = context.getSharedPreferences(name, MODE_PRIVATE); 
    Boolean b = sP.getBoolean(key, false); 
    return b; 
} 

public void write(Context context, String name, String key, boolean value) { 
    SharedPreferences sP = context.getSharedPreferences(name, MODE_PRIVATE); 
    SharedPreferences.Editor editor = sP.edit(); 
    editor.putBoolean(key, value); 
    editor.commit(); 
} 

ActivityB, extends FragmentActivity, 서브 클래스 : 여기에 내가 지금 무엇을 가지고

public static class SectionFragment extends Fragment

내부를 onActivityCreated()

SharedPreferences sP = getActivity().getSharedPreferences("fav", MODE_PRIVATE); 
Boolean b = sP.getBoolean(posName, false); 

결과 = b ALWA ys = false

모든 아이디어?

+0

변수'posName'은 어떤 값을 설정합니까? 항상 같은 가치가 있을까요? DDMS보기를 사용하여 공유 환경 설정의 값을 검사 할 수 있습니다. http://stackoverflow.com/questions/14913026/edit-shared-preferences-from-ddms – amatellanes

+0

실제 환경에서 좀 더 상황 별 코드를 제공 할 수 있습니까? 프로그램? 우리가 여기서 본 코드는 괜찮은 것 같지만 사용 중에 보지 않고 말할 수 있습니다. – Brian

+0

안녕 얘들 아, 나는 그것을 고쳤다. 이 오류는 중요한 불일치였다. 죄송합니다.이 게시물을 업데이트하는 것을 잊었습니다. 감사! –

답변

2

사용 getSharedPreferences`: 안드로이드 문서에서

public void write(Context context, String key, boolean value) { 

    SharedPreferences sharedPreferences = context.getSharedPreferences(
      NAME_SHAREDPREFERENCES, MODE_PRIVATE); 
    SharedPreferences.Editor editor = sharedPreferences.edit(); 
    editor.putBoolean(key, value); 
    editor.commit(); 
} 

public Boolean read(Context context, String key) { 
    SharedPreferences sharedPreferences = context.getSharedPreferences(
      NAME_SHAREDPREFERENCES, MODE_PRIVATE); 
    Boolean b = sharedPreferences.getBoolean(key, false); 
    return b; 
} 
+0

여전히 작동하지 않습니다. 위의 내 편집을 참조하십시오. –

2

:

활동 지속 상태는 방법 getPreferences (INT)로 관리되고, 당신은 이름의 집합을 검색하고 수정할 수 있도록/값 쌍을 나타냅니다. 여러 응용 프로그램 구성 요소 (활동, 수신자, 서비스, 제공자)간에 공유되는 환경 설정을 사용하려면 기본 Context.getSharedPreferences() 메소드을 사용하여 특정 이름으로 저장된 환경 설정 객체를 검색 할 수 있습니다. (http://developer.android.com/reference/android/app/Activity.html)

그래서 기본적으로 여러 활동을 통해 환경 설정을 공유 할 수 Context.getSharedPreferences()를 사용해야합니다.

+0

이 메서드를 사용하여 현재 컨텍스트를 가져올 수 있습니다. getApplicationContext(); 그래서 다른 활동의 공유 환경 설정에 액세스하려면 getApplicationContext()를 사용하십시오. getSharedPreferences(); –

+0

아직도 작동하지 않습니다. 위의 내 편집을 참조하십시오. –

0

당신은 어디에서나 동일한 sharedPreference를 얻기 위해 다음과 같은 접근 방식을 채택 할 수있다 :

SharedPreference mPrefs = PreferenceManager.getDefaultSharedPreference(getApplicationContext()); 
SharedPreference.Editor mEditor = mPrefs.edit(); 

을 나는 그것이 유용 바랍니다.