Android의 앱에서 공유 환경 설정 데이터를 삭제하는 방법


478

응용 프로그램의 SharedPreferences 데이터를 어떻게 삭제합니까?

많은 웹 서비스를 사용하여 데이터를 동기화하는 응용 프로그램을 만들고 있습니다. 테스트 목적으로 앱을 다시 시작할 때 일부 SharedPreferences 값을 지워야합니다.

답변:


870

특정 값을 제거하려면 SharedPreferences.Editor.remove () 다음에commit()

모두 제거하고 SharedPreferences.Editor.clear()그 뒤에commit()

반환 값에 신경 쓰지 않고 응용 프로그램의 기본 스레드 에서이 값을 사용하는 경우 apply()대신 사용 을 고려하십시오 .


268
context.getSharedPreferences ( "YOUR_PREFS", 0) .edit (). clear (). commit (); // 모든 환경 설정 제거 :)
rubdottocom

2
@yoshi에는 분명히 remove ()와 clear ()가 있습니다. remove ()를 사용하여 특정 환경 설정을 제거하고 clear ()를 사용하여 모든 환경 설정을 제거하십시오. 원래 질문은 모두 제거해야하는지 명확하지 않았습니다.
Mark B

9
환경 설정 파일을 지우면 실제로 삭제되지 않는 것 같습니다. 내 테스트에서 앱 정보 패널에 나열된 "데이터"사용량을보고 새 SharedPreference 파일을 만들면이 값에 4KB가 추가되지만 editor.clear (). commit ()을 사용하면 숫자가 줄어들지 않습니다.
코드 사령관

2
@rubdottocom 의견을 별도의 답변으로 올리시겠습니까?
technophyle

10
@rubdottocom .commit () 대신 .apply ()를 사용하는 것이 좋습니다
Juan Aguilar Guisado

173

내 해결책 :

SharedPreferences preferences = getSharedPreferences("Mypref", 0);
preferences.edit().remove("text").commit();

2
변수 TEXT 만 제거합니까?
Si8

3
@ SiKni8 예, key와 키 / 값 쌍만 제거합니다 "text".
Dennis

시간이
지났기

당신은 나의 절대 정신을 구했습니다. : P 감사합니다. 한 번에 객체의 한 요소에 대한 기본 설정을 지우려고했지만 아름답게 작동합니다.
Azurespot

3
백그라운드 스레드에서 작업을 수행하려면 commit () 대신 apply ()를 사용하십시오.
Zon

124

모든 환경 설정 제거 :

SharedPreferences settings = context.getSharedPreferences("PreferencesName", Context.MODE_PRIVATE);
settings.edit().clear().commit();

단일 환경 설정 제거 :

SharedPreferences settings = context.getSharedPreferences("PreferencesName", Context.MODE_PRIVATE);
settings.edit().remove("KeyName").commit();

1
무엇입니까 KeyName?
hasnain_ahmad

2
파일 내부의 환경 설정뿐만 아니라 전체 환경 설정 파일을 삭제하는 방법은 무엇입니까?
Srikar Reddy

백그라운드 스레드에서 작업을 수행하려면 commit () 대신 apply ()를 사용하십시오. commit ()은 즉시 스토리지에 데이터를 차단하고 씁니다. apply ()는 비동기입니다.
Vaibhav

64

매번 제거 할 필요가없는 경우 다음에서 수동으로 제거 할 수 있습니다.

설정-> 응용 프로그램-> 응용 프로그램 관리-> (앱 선택)-> 데이터 지우기 또는 제거

최신 버전의 Android :

설정-> 응용 프로그램-> (앱 선택)-> 저장소-> 데이터 지우기 및 캐시 지우기


5
프로그래밍 방식으로이 작업을 수행 할 수 있습니까?
amity

@amity 다른 대답은 프로그래밍 방식으로 수행합니다.
Doomsknight 2018 년

31
프로그래밍이 아닌 옵션에 감사드립니다.
CorayThan

2
@ amity-우리 중 일부는이 답변이 필요했습니다. 코드 테스트를 계속할 수 있도록 Android 에뮬레이터에서 SharedPrefs를 제거하는 방법을 잘 모르겠습니다.
TJ Biddle

1
android studio 2.2.2 10/18/2016에는 없습니다.
새처럼 로빈

26

한 줄에 Android 공유 환경 설정 삭제 :-)

context.getSharedPreferences("YOUR_PREFS", 0).edit().clear().commit();

또는 apply비 차단 비동기 작업의 경우 :

this.getSharedPreferences("YOUR_PREFS", 0).edit().clear().apply();

나를위한 최고의 솔루션. 공유 환경 설정 컨텐츠에 동기식이 필요한 경우는 거의 없습니다.
Juan Aguilar Guisado

19

모든 솔루션이 완전히 작동하지 않거나 죽었을 것 같습니다

활동에서 모든 SharedPreferences를 지우는 방법

PreferenceManager.getDefaultSharedPreferences(getBaseContext()).edit().clear().apply();

onCreate 후 기본 활동에서 이것을 호출하십시오.

참고 * .apply()대신에 사용 했습니다 .commit(). commit ()을 자유롭게 선택할 수 있습니다.


정확히 내가 원하는 것. 감사합니다. 모든 기본 환경 설정이 지워집니다
Arpit Patel

11

루팅 된 전화 없이도 adb 셸을 사용하여이 작업을 수행 할 수 있습니다. 유일한 문제점은 앱을 디버깅 할 수 있어야한다는 것입니다.

run-as <your package name> <command>

예를 들면 다음과 같습니다.

run-as com.asdf.blah rm /data/data/com.asdf.blah/databases/myDB.db

또는 위의 작업을 수행 할 수 있지만 명령없이 앱 패키지 루트로 이동하여 앱 컨텍스트에서 더 많은 명령을 실행할 수 있습니다.


1
유용한 팁은 +1입니다 run-as. 당신은 내가 3 년 후에 이것을 발견했을 것이라고 생각할 것입니다 ...
Richard Le Mesurier

이것은 Sharedpreferences가 아니라 sqlite 데이터베이스입니다
OneCricketeer


9

API 24 (Nougat) 기준으로 다음을 수행 할 수 있습니다.

context.deleteSharedPreferences("YOUR_PREFS");

그러나 이전 버전과의 호환성이 없으므로 24 미만을 지원하는 경우 다음을 준수하십시오.

context.getSharedPreferences("YOUR_PREFS", Context.MODE_PRIVATE).edit().clear().apply(); 

9

그들 모두를 지우십시오 :

PreferenceManager.getDefaultSharedPreferences(context).edit().clear().apply()

8

기기를 사용하여 앱을 수동으로 제거 할 수도 있습니다. 그런 다음 앱을 다시 설치할 때 공유 환경 설정이 재설정되었습니다.


감사합니다-프로그래밍 방식으로 sharedPreferences를 프로그래밍 방식으로 제거하고 싶지 않으므로 이것이 효과적이었습니다.
Simon

내 장치에는 제거 옵션에서 "데이터 지우기"옵션이 있는데,이 옵션은 저에게 효과적이며 앱을 다시 설치할 필요가 없습니다.
G O'Rilla

8

클래스 정의에서 :

private static final String PREFERENCES = "shared_prefs";

private static final SharedPreferences sharedPreferences  = getApplicationContext().getSharedPreferences(PREFERENCES, MODE_PRIVATE);

수업 내부 :

public static void deleteAllSharedPrefs(){
    sharedPreferences.edit().clear().commit();
}

7

이 코드를 사용해보십시오 :

SharedPreferences sharedPreferences = getSharedPreferences("fake", Context.MODE_PRIVATE);
SharedPreferences.Editor edit = sharedPreferences.edit();
edit.clear().commit();

5

테스트 용인 경우. adb 명령을 사용할 수 있습니다.

adb shell pm clear <package name>

5
String prefTag = "someTag";
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(applicationContext);
prefs.edit().remove(prefTag).commit();

이름이 "someTag"인 저장된 공유 환경 설정이 삭제됩니다.


3
  • 특정 값을 제거하려면

SharedPreferences.Editor remove (String key) 다음에 commit () 또는 apply ()

  • 모든 값을 제거하려면

    SharedPreferences.Editor clear () 다음에 commit () 또는 apply ()


3

기본 설정에서 키 값 쌍을 제거하려면 다음을 쉽게 수행 할 수 있습니다.

getActivity().getSharedPreference().editor().remove("key").apply();

공유 환경 설정을 쉽게 조작 할 수있는 라이브러리도 개발했습니다. 다음 링크를 찾을 수 있습니다

https://github.com/farruhha/SimplePrefs


2

모든 클래스에서 모든 SharedPreference를 중앙에서 지우려면 :

public static SharedPreferences.Editor getEditor(Context context) {
    return getPreferences(context).edit();
}

그런 다음 모든 클래스에서 : 커밋은 기본 설정이 지워 졌는지 여부를 확인할 수있는 부울을 반환합니다.

Navigation.getEditor(this).clear().commit();

또는 apply를 사용할 수 있습니다. 그것은 void를 반환

Navigation.getEditor(this).clear().apply();

1
new File(context.getFilesDir(), fileName).delete();

공유 환경 설정에서 파일을 삭제할 수 있습니다


위의 모든 해결책이 잘못되었습니다. 파일 삭제 만 공유 환경 설정을 삭제하는 것이
좋습니다

1

많은 공유 환경 설정 키가 있기 때문에 답이 없습니다.

단위 테스트 대신 Android 테스트를 실행한다고 가정 해 봅시다.

모든 shared_prefs 파일 을 반복하고 삭제하기 위해 노력하고 있습니다.

@BeforeClass는 모든 테스트 및 ActivityTestRule 전에 실행됩니다.

@BeforeClass
public static void setUp() {
    Context context = InstrumentationRegistry.getTargetContext();

    File root = context.getFilesDir().getParentFile();
    String[] sharedPreferencesFileNames = new File(root, "shared_prefs").list();
    for (String fileName : sharedPreferencesFileNames) {
        context.getSharedPreferences(fileName.replace(".xml", ""), Context.MODE_PRIVATE).edit().clear().commit();
    }
}

0

코 틀린 KTX 하는 방법 모두 취소 기본 설정을 :

val prefs: SharedPreferences = getSharedPreferences("prefsName", Context.MODE_PRIVATE)
prefs.edit(commit = true) {
    clear()
}

예제가있는 모든 공유 환경 설정 작업을 보려면 여기클릭하십시오.


-2

preferences.edit().remove("key").commit()공유 환경 설정에서 저장된 값을 삭제 하는 데 사용할 수 있습니다 .


-6

오늘 아침에 그냥 했어. 명령 프롬프트에서 :

adb shell
cd /data/data/YOUR_PACKAGE_NAME/shared_prefs
rm * // to remove all shared preference files
rm YOUR_PREFS_NAME.xml // to remove a specific shared preference file

참고 : 기본 Android 가상 기기, Genymotion 기기 또는 실제 루팅 된 핸드셋 / 태블릿 등 루팅 된 기기가 필요합니다.


9
따라서이 솔루션에 투표 한 사람은 이유를 설명해야합니다 /data/data. 직접 액세스하려면 루팅 된 전화가 필요합니다 !
nuala

3
ADB 셸이 아닌 응용 프로그램에서 SharedPreferences를 제거해야합니다. SharedPreferences.edit (). clear (). commit ();
ThePunisher

절대 루트 솔루션을 원하지 않는다고 묻지 않았습니다. 여기에는 기술적 인 오류가 있습니다. 이 방법에는 루트가 필요하므로 권한있는 셸을 연 su후에 실행해야합니다 adb shell.
Anubian Noob

왜 이렇게 많이 다운 투트 되었습니까? 이것은 유용한 답변이며 내가 찾고있는 답변입니다.
Matt D
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.