অ্যান্ড্রয়েডে অ্যাপ থেকে ভাগ করা পছন্দসই ডেটা কীভাবে মুছবেন


477

আমি কীভাবে আমার অ্যাপ্লিকেশনটির জন্য SharedPreferences ডেটা মুছব?

আমি একটি অ্যাপ্লিকেশন তৈরি করছি যা ডেটা সিঙ্ক করতে প্রচুর ওয়েব পরিষেবা ব্যবহার করে। পরীক্ষার উদ্দেশ্যে, আমি অ্যাপ্লিকেশনটি পুনরায় চালু করার সময় আমার কিছু ভাগ করা পছন্দসমূহের মানগুলি মুছতে হবে।

উত্তর:


869

নির্দিষ্ট মানগুলি মুছে ফেলতে: SharedPreferences.Editor.remove () এর পরে acommit()

এগুলি SharedPreferences.Editor.clear()অনুসরণ করে এcommit()

যদি আপনি ফেরতের মানটির বিষয়ে চিন্তা করেন না এবং আপনি এটিকে আপনার অ্যাপ্লিকেশনের মূল থ্রেড থেকে ব্যবহার করছেন তবে apply()পরিবর্তে ব্যবহার করার বিষয়টি বিবেচনা করুন।


268
প্রসঙ্গ। // আপনার সমস্ত
প্রিফেসগুলি

2
@ ইউশি অবশ্যই একটি অপসারণ () পাশাপাশি একটি পরিষ্কার () আছে। আপনি নির্দিষ্ট পছন্দগুলি অপসারণ করতে মুছে ফেলা () ব্যবহার করেন, আপনি সেগুলি সরাতে পরিষ্কার () ব্যবহার করেন। তাদের এগুলি সমস্ত অপসারণ করার দরকার আছে কিনা তা আসল প্রশ্নটি পরিষ্কার ছিল না।
মার্ক

9
পছন্দসই ফাইলটি সাফ করা আসলে এটি মুছে ফেলা হবে না। অ্যাপ তথ্য প্যানেলে তালিকাভুক্ত "ডেটা" ব্যবহার দেখে আমার নিজের পরীক্ষাগুলিতে, একটি নতুন SharedPreferences ফাইল তৈরি করে এই মানটিতে 4KB যুক্ত করা হয় তবে Editor.clear ()। কমিট () ব্যবহার করে সংখ্যা হ্রাস হয় না।
কোড কমান্ডার

2
@ রবডোটোকম আপনি কেন নিজের মন্তব্য আলাদা উত্তর হিসাবে রাখেন না?
টেকনোফাইল 26'15

10
@ কম্বিট () এর পরিবর্তে অ্যাপ্লিকেশন () ব্যবহার করে @ রবডোটোকম আরও ভাল
জুয়ান আগুইলার গুইসাদো

173

আমার সমাধান:

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

2
এটি কি কেবল ভেরিয়েবলটি টেক্সট সরিয়ে দেয়?
Si8

3
@ সিকনি 8 হ্যাঁ, এটি কী সহ কেবল কী / মান জুটি সরিয়ে দেয় "text"
ডেনিস

আমি এটি কাজ করতে সক্ষম হয়েছি কারণ এটি একটি সময় হয়েছে তবে প্রতিক্রিয়া জন্য আপনাকে ধন্যবাদ :)
Si8

আপনি আমার নিখুঁত বিচক্ষণতা বাঁচিয়েছেন। : পি আপনাকে ধন্যবাদ। আমি একবারে কোনও জিনিসের একটি উপাদানের প্রিফেস সাফ করার চেষ্টা করছিলাম এবং এটি সুন্দরভাবে কাজ করে।
আজুরস্পট

3
একটি পটভূমির থ্রেডে কার্য সম্পাদন করার জন্য অঙ্গীকার () পরিবর্তে প্রয়োগ () ব্যবহার করার বিষয়টি বিবেচনা করুন।
জোন

123

সমস্ত পছন্দগুলি সরানো হচ্ছে:

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?
হাসনাইন_হমাদ

2
কেবলমাত্র ফাইলের অভ্যন্তরীণ পছন্দগুলি নয়, পুরো পছন্দ ফাইলটি কীভাবে মুছবেন?
শ্রীকর রেড্ডি

কোনও পটভূমির থ্রেডে কার্য সম্পাদনের জন্য কমিট () পরিবর্তে প্রয়োগ () ব্যবহার করুন। () প্রতিরোধ করে এবং তাত্ক্ষণিকভাবে স্টোরেজে ডেটা লিখুন। প্রয়োগ () হ'ল অ্যাসিনক্রোনাস।
বৈভব

64

যদি প্রতিবার এটি অপসারণের প্রয়োজন না হয় তবে আপনি এটিকে ম্যানুয়ালি মুছে ফেলতে পারেন:

সেটিংস -> অ্যাপ্লিকেশন -> অ্যাপ্লিকেশনগুলি পরিচালনা করুন -> (আপনার অ্যাপ্লিকেশনটি চয়ন করুন) -> ডেটা সাফ করুন বা আনইনস্টল করুন

অ্যান্ড্রয়েডের আরও নতুন সংস্করণ:

সেটিংস -> অ্যাপ্লিকেশন -> (আপনার অ্যাপ্লিকেশনটি চয়ন করুন) -> সঞ্চয়স্থান -> ডেটা সাফ করুন এবং ক্যাশে সাফ করুন


5
আমরা কি এই জিনিসগুলিকে প্রোগ্রাম্যাটিক করতে পারি?
স্নেহ

@ অ্যামিটি অন্য উত্তরটি এটি অগ্রগতিমূলকভাবে করেছে।
ডুমস্কটনাট

31
একটি প্রোগ্রামহীন বিকল্পের জন্য ধন্যবাদ।
CorayThan

2
@ সাম্য - আমাদের কারও কারও এই উত্তর প্রয়োজন। আমি কীভাবে কোনও অ্যান্ড্রয়েড এমুলেটরে শরেডপ্রেফগুলি সরিয়ে ফেলতে পারি তা সম্পর্কে আমি নিশ্চিত নই যাতে আমি আমার কোড পরীক্ষা করে চালিয়ে যেতে পারি।
টিজে বিডল

1
অ্যান্ড্রয়েড স্টুডিওতে নেই 2.2.2 10/18/2016।
রবিন পাখির মতো

26

অ্যান্ড্রয়েড ভাগ করা পছন্দগুলি এক লাইনে মুছে ফেলা হচ্ছে :-)

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

বা applyঅ-ব্লকিং অ্যাসিঙ্ক্রোনাস অপারেশনের জন্য:

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

আমার জন্য সেরা সমাধান। কয়েকটি ক্ষেত্রেই যখন সমকালীন অংশীদারি সামগ্রীর সামগ্রীর জন্য প্রয়োজনীয় হয় nch
জুয়ান আগুইলার গুইসাদো

19

দেখে মনে হচ্ছে যে সমস্ত সমাধান সম্পূর্ণরূপে কাজ করছে না বা মরে গেছে

কোনও ক্রিয়াকলাপে সমস্ত অংশীদারি পছন্দগুলি সাফ করতে

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

অনক্রিটের পরে মূল ক্রিয়াকলাপ থেকে এটিকে কল করুন

দ্রষ্টব্য * আমি এর .apply()পরিবর্তে ব্যবহার করেছি .commit(), আপনি কমিট () নির্বাচন করতে পারেন;


ঠিক আমি যা চাই ধন্যবাদ এটি সমস্ত ডিফল্ট পছন্দগুলি সাফ করে
অর্পিত প্যাটেল

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 বছর পরে আমি এটি পেয়েছি ...
রিচার্ড লে মেসুরিয়ার

এটি শরিফেরফেরিয়েন্স নয়, এটি স্কিলাইট ডেটাবেস
ওয়ানক্রিকেটায়ার


9

এপিআই 24 (নওগাত) হিসাবে আপনি কেবল এটি করতে পারেন:

context.deleteSharedPreferences("YOUR_PREFS");

তবে, কোনও পশ্চাদপটে সামঞ্জস্য নেই, তাই আপনি যদি 24 এর চেয়ে কম কিছু সমর্থন করেন তবে এর সাথে আটকে থাকুন:

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


8

আপনি নিজের ডিভাইসটি ব্যবহার করে নিজের অ্যাপ্লিকেশনটি কেবল ম্যানুয়ালি আনইনস্টল করতে পারেন। তারপরে আপনি যখন নিজের অ্যাপটি পুনরায় ইনস্টল করবেন, তখন ভাগ করা পছন্দগুলি পুনরায় সেট করা হবে।


ধন্যবাদ - আমি প্রোগ্রামযুক্তভাবে ভাগ করা পছন্দগুলি মুছে ফেলতে চাইনি তাই এটি আমার পক্ষে কাজ করে।
সাইমন

আমার ডিভাইসে আমার কাছে আনইনস্টল বিকল্পটিতে "তথ্য পরিষ্কার করার" বিকল্প রয়েছে, যা আমার পক্ষে কাজ করেছে এবং আমার অ্যাপ্লিকেশনটি পুনরায় ইনস্টল করার প্রয়োজনীয়তা সরিয়ে দিয়েছে।
জি ও'রিলা

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 shell pm clear <package name>

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

এটি "কিছুটা ট্যাগ" নামের সংরক্ষণিত ভাগ করা পছন্দগুলি মুছে ফেলবে।


3
  • একটি নির্দিষ্ট মান মুছে ফেলতে,

SharedPreferences.Editor সরান (স্ট্রিং কী) এর পরে কমিট () বা প্রয়োগ ()

  • সমস্ত মান মুছে ফেলতে,

    SharedPreferences.Editor ক্লিয়ার () এর পরে কমিট () বা একটি প্রয়োগ ()


2

মূল মান জোড়াকে অগ্রাধিকার থেকে সরানোর জন্য, আপনি নিম্নলিখিতটি সহজেই করতে পারেন

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

আমি ভাগ করে নেওয়া পছন্দসমূহের সহজে কারসাজির জন্য গ্রন্থাগারও তৈরি করেছি। আপনি নিম্নলিখিত লিঙ্কটি পেতে পারেন

https://github.com/farruhha/SimplePrefs


2

যে কোনও শ্রেণি থেকে কেন্দ্রীয়ভাবে সমস্ত ভাগ করা পছন্দগুলি সাফ করতে:

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

এবং তারপরে যে কোনও ক্লাস থেকে: (একটি বুলিয়ান প্রতিশ্রুতিবদ্ধ যেখানে আপনার পছন্দগুলি সাফ হয়েছে কিনা তা পরীক্ষা করতে পারবেন)

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

অথবা আপনি প্রয়োগ ব্যবহার করতে পারেন; এটি অকার্যকর ফিরে আসে

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

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

আমি এর সাথে ভাগ করা পছন্দগুলিতে ফাইল মুছতে পারি


উপরের সমস্ত সমাধানগুলি ভুল, ভাগ করা পছন্দগুলি মুছে ফেলার জন্য কেবল ফাইল
মুছাই

1

আমার কাছে অনেকগুলি ভাগ করে নেওয়া পছন্দসমূহ কী থাকায় উত্তরগুলির কোনওটিই আমার পক্ষে কাজ করে না।

ধরা যাক আপনি ইউনিট পরীক্ষার পরিবর্তে একটি Android পরীক্ষা চালাচ্ছেন।

এটি আমার জন্য লুপ এবং সমস্ত ভাগ করা_পরিচয় ফাইলগুলি মুছে ফেলার জন্য কাজ করছে ।

@BeforeClass সমস্ত পরীক্ষা এবং ক্রিয়াকলাপ টেস্টরুলের আগে চলবে

@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

Kotlin 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

দ্রষ্টব্য : এর জন্য একটি মূলযুক্ত ডিভাইস প্রয়োজন যেমন স্টক অ্যান্ড্রয়েড ভার্চুয়াল ডিভাইস, একটি জিনমোশন ডিভাইস, বা একটি আসল শিকড় হ্যান্ডসেট / ট্যাবলেট ইত্যাদি requires


9
সুতরাং যে কেউ এই সমাধানটি নীচে ভোট দিয়েছেন, তাদেরও সম্ভবত এটি ব্যাখ্যা করতে হবে: /data/dataসরাসরি অ্যাক্সেস করার জন্য আপনার একটি মূলযুক্ত ফোন প্রয়োজন !
নুয়াল

3
আপনাকে অ্যাপ্লিকেশন ফর্মটি ভাগ করে নিতে হবে এবং এডিবি শেল নয়, এটি ব্যবহার করে সম্পন্ন করা হয়েছে: SharedPreferences.edit ()। পরিষ্কার ()। অঙ্গীকার ();
দ্যপুনিশার

জিজ্ঞাসা করা কখনও বলেন নি যে তারা কোনও মূল সমাধান চায় না। যদিও এখানে একটি প্রযুক্তিগত ত্রুটি রয়েছে; কারণ এই পদ্ধতি রুট প্রয়োজন, আপনি চালানোর আছে suপরে adb shellএকটি ছবি তৈরী শেল খুলুন।
অনুবিয়ান নুব

কেন এতটা নিম্নচ্যুত হয়েছিল? এটি একটি দরকারী উত্তর এবং আমি যা খুঁজছিলাম।
ম্যাট ডি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.