سؤال

كيف يمكنني حذف بيانات المشاركة في طلبي؟

أقوم بإنشاء تطبيق يستخدم الكثير من خدمات الويب لمزامنة البيانات. لأغراض الاختبار ، أحتاج إلى مسح بعض قيم المشاركين عند إعادة تشغيل التطبيق.

هل كانت مفيدة؟

المحلول

لإزالة قيم محددة: sharepreferences.editor.remove () متبوعة ب commit()

لإزالتها جميعًا SharedPreferences.Editor.clear() متبوعة ب commit()

إذا كنت لا تهتم بقيمة الإرجاع وكنت تستخدم هذا من موضوع التطبيق الرئيسي ، ففكر في استخدام apply() في حين أن.

نصائح أخرى

بلدي الحل:

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

إزالة جميع التفضيلات:

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();

إذا لم يكن من الضروري إزالته في كل مرة ، فيمكنك إزالته يدويًا من:

الإعدادات -> التطبيقات -> إدارة التطبيقات -> (اختر التطبيق الخاص بك) -> مسح البيانات أو إلغاء التثبيت

إصدارات أحدث من Android:

الإعدادات -> التطبيقات -> (اختر التطبيق الخاص بك) -> التخزين -> مسح البيانات ومسح ذاكرة التخزين المؤقت

حذف تفضيلات Android المشتركة في سطر واحد :-)

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

أو apply لعملية غير متزامنة غير متزامنة:

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

يبدو أن كل الحل لا يعمل بشكل كامل أو خارج

لمسح جميع المشاركين في النشاط

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

استدعاء هذا من النشاط الرئيسي بعد oncreate

ملاحظة* استخدمت

.apply()

بدلاً من

.commit()

أنت حر في اختيار الالتزام () ؛

يمكنك استخدام قذيفة ADB للقيام بذلك حتى بدون هاتف متجذر. الصيد الوحيد هو أن التطبيق يجب أن يكون قابلاً للتصحيح.

run-as <your package name> <command>

فمثلا:

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

بدلاً من ذلك ، يمكنك فقط القيام بما سبق ولكن بدون الأمر الذي سيوجهك إلى جذر حزمة التطبيق والسماح لك بتنفيذ المزيد من الأوامر في سياق التطبيق.

Editor editor = getSharedPreferences("clear_cache", Context.MODE_PRIVATE).edit();
editor.clear();
editor.commit();

امسحهم جميعًا:

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

في تعريفات الفصل

private static final String PREFERENCES = "shared_prefs";

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

داخل الفصل

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

جرب هذا الرمز:

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

اعتبارًا من API 24 (Nougat) يمكنك القيام بذلك:

context.deleteSharedPreferences("YOUR_PREFS");

ومع ذلك ، لا يوجد توافق متخلف ، لذلك إذا كنت تدعم أي شيء أقل من 24 ، التزم:

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

يمكنك أيضًا إلغاء تثبيت تطبيقك يدويًا باستخدام جهازك. ثم عند إعادة تثبيت تطبيقك ، تمت إعادة تعيين التفضيلات المشتركة.

إذا كان للاختبار الخاص بك. يمكنك استخدام أوامر ADB.

adb shell pm clear <package name>
  • لإزالة قيمة معينة ،

sharepreferences.editor إزالة (مفتاح السلسلة) تليها الالتزام () أو تطبيق ()

  • لإزالة جميع القيم ،

    sharepreferences.editor clear () تليها الالتزام () أو تطبيق ()

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

سيؤدي هذا إلى حذف التفضيلات المشتركة المحفوظة باسم "Sometag".

لمسح جميع المشاركين مركزيا من أي فئة:

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

آنذاك من أي فصل: (ارتكاب عائد منطقي ، يمكنك التحقق مما إذا كانت تفضيلاتك قد تم مسحها أم لا)

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

أو: يمكنك استخدام تطبيق: إنه يعيد void savigation.geteditor (هذا) .clear (). التطبيق () ؛

لإزالة أزواج القيمة الرئيسية من التفضيل ، يمكنك بسهولة القيام بما يلي

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

لقد قمت أيضًا بتطوير مكتبة لسهولة التلاعب بالتفضيلات المشتركة. قد تجد الرابط التالي

https://github.com/farruhha/simpleprefs

لا تعمل أي من الإجابات بالنسبة لي لأن لدي العديد من مفاتيح التفضيلات المشتركة.

دعنا نقول أنك تقوم بإجراء اختبار Android بدلاً من اختبار الوحدة.

إنه يعمل بالنسبة لي حلقة وحذف من خلال كل shared_prefs الملفات.

سيتم تشغيل BeboReClass قبل جميع الاختبارات و 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();
    }
}
new File(context.getFilesDir(), fileName).delete();

يمكنني حذف الملف بتفضيلات مشتركة معها

تستطيع use-> preferences.edit().remove("key").commit(); لحذف القيمة المحفوظة من التفضيلات المشتركة.

فقط فعلت هذا هذا الصباح. من موجه الأوامر:

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 Android أو جهاز Genymotion أو هاتف/جهاز لوحي فعلي جذر ، إلخ.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top