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.