如何在注销期间清除 SharedPreferences? [复制]

Posted

技术标签:

【中文标题】如何在注销期间清除 SharedPreferences? [复制]【英文标题】:How to clear SharedPreferences during Logout? [duplicate] 【发布时间】:2018-09-22 07:47:25 【问题描述】:
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(Login.this);
SharedPreferences.Editor editor = prefs.edit();
editor.putString("UID", jobj1.getString("admin_id").toString());
editor.apply();

Toast toast = Toast.makeText(Login.this, "Login Successfully", Toast.LENGTH_SHORT);
toast.setGravity(Gravity.CENTER | Gravity.CENTER_HORIZONTAL, 0, 0);
toast.show();
Intent i1=new Intent(Login.this,DashBoard.class);
startActivity(i1);
finish();

这是我使用 Intent 的注销代码,我想在单击注销按钮时清除 SharedPreference

case "Logout":
              Intent i5=new Intent(context1, Login.class);
              i5.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
              context1.startActivity(i5);
              ((DashBoard)context1).finish();
              Toast.makeText(context1,"Logout",Toast.LENGTH_LONG).show();

【问题讨论】:

问之前有没有试过搜索? 是的,先生,但代码对我不起作用。 代码应该做什么?哪个代码不起作用?究竟有什么不同? code not work for me 显示您尝试了哪些代码。 logout.setOnClickListener(new View.OnClickListener() @Override public void onClick(View view) // 启动新闻源屏幕 SharedPreferences preferences =getSharedPreferences("loginPrefs",Context.MODE_PRIVATE); SharedPreferences .Editor editor = preferences.edit(); editor.clear(); editor.commit(); finish(); ); 【参考方案1】:
SharedPreferences.Editor editor = PreferenceManager.getDefaultSharedPreferences(this).edit();
editor.remove("UID");//your key
editor.commit();

clear() 可以从首选项中删除所有值。

【讨论】:

【参考方案2】:

对于 API 24 (Nougat) 或更高版本,您只需致电 deleteSharedPreferences(String name)

context.deleteSharedPreferences("YOUR_PREFS");

但是,没有向后兼容性,因此如果您支持小于 24 的任何内容,则可以使用 apply() 进行非阻塞异步操作。

context.getSharedPreferences("YOUR_PREFS", Context.MODE_PRIVATE).edit().clear().apply(); //apply() for non-blocking asynchronous operation 

或者在你的情况下,

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

commit() : 同步写入数据(阻塞调用它的线程)并返回操作成功。

apply() : 安排异步写入数据。它不会通知您操作是否成功。

As per official docuement, 如果您不关心返回值并且您在应用程序的主线程中使用它,请考虑使用apply() 而不是commit()

【讨论】:

【参考方案3】:

使用clear()方法:

SharedPreferences.Editor editor = PreferenceManager.getDefaultSharedPreferences(this).edit();
editor.clear()
editor.apply()

【讨论】:

【参考方案4】:
SharedPreferences preferences = context.getSharedPreferences("pref_name, Context.MODE_PRIVATE);
preferences.edit().clear().commit();

【讨论】:

会更喜欢 .apply() 而不是 .commit() ,因为 *apply 是异步调用

以上是关于如何在注销期间清除 SharedPreferences? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何在不注销的情况下清除所有会话变量

注销会在浏览器上留下 JSESSIONID。如何清除它?

如何在 CocoaLibSpotify 注销时清除用户名和密码?

如何在 android 中注销后清除 Facebook 字段(图像、姓名、性别)

如何在注销期间取消所有 NSMutableURLRequest?

如何从 Facebook 注销或清除 WebAuthenticationBroker 上的 cookie?