2011-08-07 3 views
0

환경 설정이 어디에도 저장되어 있지 않다는 것을 안전하게 주장하는 방법을 찾으려고 노력했습니다. 그것은 아직 캐싱 메커니즘을 이해하지 못한 것 같아요 문서는 그것을 명확하게하지 않습니다. 이것은 내가 무슨 짓을 :공유 환경 설정이 없음을 안전하게 선언하는 방법

File prefsFile = new File("/data/data/"+context.getPackageName() + "/shared_prefs/" 
    + context.getPackageName() + "_preferences.xml"); 
prefsFile.delete(); 
assertFalse(prefsFile.exists()); // success 

// This assertion could fail - why? 
assertEquals(0, context.getSharedPreferences(context.getPackageName()+"_preferences", 
    MODE_PRIVATE).getAll().size()); 

나는의 환경 설정 파일을 삭제하지만,이 getAll().size() 0이 아닌 값을 반환하는 것이 여전히 가능하다.

누군가 설명 할 수 있습니까?

답변

2

환경 설정이 아무 곳에도 저장되지 않는다고 안전하게 주장하는 방법을 찾으려고 노력했습니다.

왜?

누군가 설명 할 수 있습니까? 내 머리 위로 떨어져

: 당신은 실제로 파일을 삭제하기 전에 존재, 또는 디렉토리가

  • 존재하는 경우가 하드 코딩되어 경로를 있는지 확인하기 위해 테스트되지 않은

    • 그 모든 장치에서 정확하지 않을 수 있습니다
    • 당신은 파일을 삭제하면 당신은에 의해 반환 된 HashMap보고 귀찮게하지 않는 SharedPreferences
    • 의 공정 중 복사본을 삭제한다고 가정하는
    • getAll()는 데이터가 있는지, 또는 어떤 시스템이 제공하는 초기 값

    당신이 SharedPreferences을 삭제하려면

  • 경우, 파일을 삭제하지 마십시오. SharedPreferences 개체에서 edit().clear().commit() 또는 edit().clear().apply()으로 전화하십시오.

    +0

    게시물 주셔서 감사합니다! 따라서 SharedPreferences 인스턴스는 실제로 지속 된 prefs를 복사/캐시하고 단순히 java.io.File 객체와 같은 참조를 제공하지 않습니다. 첫 번째 점 : delete()는 파일에 ' 왜 그런가? 그래서 여러분은 prefs의 in-process 복사본에 대해서만 테스트 할 것입니다. – cody

    +0

    "SharedPreferences 인스턴스는 실제로 지속 된 환경 설정을 복사/캐시합니다"- 예. 사실, 뒤에서 파일을 엉망으로 만들면 좋아하지 않습니다. "delete()는 파일이 존재하지 않는다면 false를 리턴합니다. 그래서 왜 체크합니까?" - 당신은'delete()'의 반환 값을 검사하지 않기 때문에. "그래서 당신은 prefs의 in-process 복사본에 대해서만 테스트 할 것입니다." - 실제 API를 사용합니다. 환경 설정을 지우고 변경 사항을 커밋하면 파일의 내용이 지워집니다. – CommonsWare

    +0

    글쎄, 나는 파일이 삭제되기 전에 존재했는지, 아니면 지워졌는지 확인하고 싶지 않았다. 단지 그것이 존재하지 않는다는 것을 확인하고 싶었다. 한 가지 질문 : 시스템에서 제공 한 초기 값의 어떤 종류가 파일에 기록 될 수 있었습니까? – cody

    관련 문제