SharedPreferences是androID存储数据的方式之一,适合用于存储少量的数据,常用于存储配置信息,如登录信息。
存数据
public static int MODE = Context.MODE_WORLD_READABLE + Context.MODE_WORLD_WRITEABLE;······SharedPreferences sp = getSharedPreferences("userInfo", MODE);SharedPreferences.Editor editor = sp.edit();editor.putString("USER_name", name).commit();editor.putString("ID", String.valueOf(ID)).commit();
取数据
SharedPreferences preferences = getSharedPreferences("userInfo", Activity.MODE_PRIVATE);String username= preferences.getString("USER_name", "");String ID= preferences.getString("ID", "");
创建一个userinfo的实体类。
public class UserInfo { private String username; private String ID; public String getID() { return ID; } public voID setID(String ID) { this.ID = ID; } public String getUsername() { return username; } public voID setUsername(String username) { this.username = username; }}
然后创建UserManage 保存用户信息的管理类。
import androID.content.Context;import androID.content.SharedPreferences;import androID.text.TextUtils;import androID.util.Log;public class UserManage { private static UserManage instance; private UserManage() { } public static UserManage getInstance() { if (instance == null) { instance = new UserManage(); } return instance; } /** * 保存自动登录的用户信息 */ public voID saveUserInfo(Context context, String username, String password) { SharedPreferences sp = context.getSharedPreferences("userInfo", Context.MODE_PRIVATE);//Context.MODE_PRIVATE表示SharePrefences的数据只有自己应用程序能访问。 SharedPreferences.Editor editor = sp.edit(); editor.putString("USER_name", username);// edit.putString("键名","值"); editor.putString("ID", ID); // editor.commit(); editor.apply(); } public static String takename(Context context){ SharedPreferences sharedPreferences=context.getSharedPreferences("usesrInfo",0); String name=sharedPreferences.getString("USER_name",null); return name; } /** * 获取用户信息model * * @param context * @param * @param */ public UserInfo getUserInfo(Context context) { SharedPreferences sp = context.getSharedPreferences("userInfo", Context.MODE_PRIVATE); UserInfo userInfo = new UserInfo(); userInfo.setUsername(sp.getString("USER_name", "")); userInfo.setID(sp.getString("ID", "")); return userInfo; } /** * userInfo中是否有数据 */ public boolean hasUserInfo(Context context) { UserInfo userInfo = getUserInfo(context); if (userInfo != null) { if ((!TextUtils.isEmpty(userInfo.getUsername())) && (!TextUtils.isEmpty(userInfo.getID()))) {//有数据 return true; } else { return false; } } return false; } public static voID clear(Context context) { SharedPreferences preferences = context.getSharedPreferences("userInfo", Context.MODE_PRIVATE); SharedPreferences.Editor editor = preferences.edit(); editor.clear(); editor.commit(); }}
如果登录成功存储用户登录的用户名和从数据库中获取的ID,因为在后面的数据库 *** 作 *** 作需要经常用到这2个数据,如果后面用户 *** 作过程中修改了用户名可以调用SharePrefences存储数据方法再存储一下,存储的数据会替换。
判断SharedPreferences 中是否存储有数据,在用户第二次进入APP时,判断如果有数据就跳转到APP首页,如果没有存储数据就跳转登录页。我是在MainActivity.java中判断。
//自动登录判断,SharePrefences中有数据,则跳转到主页,没数据则跳转到登录页if (UserManage.getInstance().hasUserInfo(this)) { //有数据跳转首页 } else { //无数据跳转登录页 }
退出登录 *** 作,
创建ActivityCollector类
//管理所有的活动,这个是对于用户退出登录public class ActivityCollector { public static List<Activity> activityList=new ArrayList<>(); public static voID addActivity(Activity activity){ activityList.add(activity); } public static voID remove(Activity activity){ activityList.remove(activity); } public static voID finishAll(){ for (Activity activity:activityList){ if (!activity.isFinishing()){ //判断activity是否销毁 activity.finish(); //销毁activity } } }}
创建BaseActivity.java父类
public class BaseActivity extends AppCompatActivity { private MyForceExitReceiver receiver; //声明一个自己的广播接收者内部类 private MyBaseActiviy_broad oBaseActiviy_broad; @OverrIDe protected voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ActivityCollector.addActivity(this); } //定义一个广播 public class MyBaseActiviy_broad extends broadcastReceiver { public voID onReceive(Context arg0, Intent intent) {//接收发送过来的广播内容 int closeAll = intent.getIntExtra("closeAll", 0); if (closeAll == 1) { finish();//销毁BaseActivity } } } /** * 在activity处于返回栈顶,即处于焦点时,注册一个广播接收者 */ public voID onResume(){ super.onResume(); IntentFilter intentFilter=new IntentFilter(); //实例化一个intent过滤器 intentFilter.addAction("com.yuanlp.exit.FORCEXIT"); //只关心自己想要的广播 receiver=new MyForceExitReceiver(); registerReceiver(receiver,intentFilter); //动态注册广播 } public voID onPause(){ //当当前activity被d出框占用时,解除注册 super.onPause(); if (receiver!=null){ unregisterReceiver(receiver); receiver=null; } } public voID onDestroy(){ super.onDestroy(); ActivityCollector.remove(this); } /** * 一个广播接收者,接收到广播后,d出框提示用户退出登录, */ private class MyForceExitReceiver extends broadcastReceiver { @OverrIDe public voID onReceive(final Context context, final Intent intent) { AlertDialog.Builder builder=new AlertDialog.Builder(context); builder.setTitle("提示"); builder.setMessage("确定要退出登录?"); builder.setCancelable(false); builder.setPositivebutton("OK", new DialogInterface.OnClickListener() { @OverrIDe public voID onClick(DialogInterface dialog, int which) { ActivityCollector.finishAll(); //销毁所有活动 Intent intent=new Intent(context,LoginActivity.class); //跳转至登录界面 context.startActivity(intent); } }); builder.setNegativebutton(getResources().getString(R.string.tips_limit_false), new DialogInterface.OnClickListener() { @OverrIDe public voID onClick(DialogInterface dialogInterface, int i) { //取消按钮 } }); builder.setCancelable(true); builder.show(); } }}
退出登录界面,activity_set_user.xml文件就一个退出登录按钮,在这里代码省略。
public class SetUserActivity extends BaseActivity { private TextVIEw tvCancel; @OverrIDe protected voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentVIEw(R.layout.activity_set_user); tvCancel = findVIEwByID(R.ID.tvCancel); //退出登录按钮点击事件 tvCancel.setonClickListener(new VIEw.OnClickListener() { @OverrIDe public voID onClick(VIEw vIEw) { UserManage.clear(SetUserActivity.this); Intent intent = new Intent("com.exit.FORCEXIT"); sendbroadcast(intent); //发送广播 } }); }}
总结 以上是内存溢出为你收集整理的Android之SharedPreferences存储数据实现自动登录以及退出登录全部内容,希望文章能够帮你解决Android之SharedPreferences存储数据实现自动登录以及退出登录所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)