在我们平时使用的手机应用都可以实现只需要登陆一次账号后,第二次进入应用直接跳转到效果界面的效果,还有QQ的登陆框是如何记忆我们的隐身登陆,保存账号选项的呢,这些都是通过使用SharedPreferences共享参数效果实现的,而无须使用数据库来存储。以下我们直接看详细代码分析。

package com.example.account.login;import java.util.HashMap;
import java.util.Map;import com.android.dao.MySQLiteOpenHelper;
import com.example.account.MainActivity;
import com.example.account.R;import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;public class LoginActivity extends Activity {private EditText e1, e2;private SQLiteOpenHelper helper;private boolean flag, flag2, flag3;private HashMap<String, Object> map;@SuppressWarnings("unchecked")@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.login);TextView textView = (TextView) this.findViewById(R.id.textView1);e1 = (EditText) this.findViewById(R.id.editText1);e2 = (EditText) this.findViewById(R.id.editText2);//从共享参数获取数据map = (HashMap<String, Object>) getMsg("login");if (map != null && !map.isEmpty()) {if ((Boolean) map.get("login2")) {//若值为true,用户无需输入密码,直接跳转进入操作界面Intent intent = new Intent(LoginActivity.this,MainActivity.class);startActivity(intent);}}helper = new MySQLiteOpenHelper(this);textView.setText("登录界面");Button button = (Button) findViewById(R.id.button2);button.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {if (!e1.getText().toString().isEmpty()&& !e2.getText().toString().isEmpty()) {//从数据库获取账号信息SQLiteDatabase database = helper.getReadableDatabase();Cursor cursor = database.query("user", new String[] {"username", "password" }, null, null, null, null,null);while (cursor.moveToNext()) {flag = e1.getText().toString().equals(cursor.getString(cursor.getColumnIndex("username")));flag2 = e2.getText().toString().equals(cursor.getString(cursor.getColumnIndex("password")));if (flag && flag2) {Intent intent = new Intent(LoginActivity.this,MainActivity.class);startActivity(intent);//登陆跳转动画overridePendingTransition(R.anim.zoomin,R.anim.zoomout);Toast.makeText(LoginActivity.this, "登录成功",Toast.LENGTH_SHORT).show();flag3 = true;//登陆成功后将flag设置为ture存入共享参数中HashMap<String, Object> map = new HashMap<String, Object>();map.put("login2", flag3);saveMsg("login", map);}}if (!flag3) {Toast.makeText(LoginActivity.this, "您输入的帐号或密码有误",Toast.LENGTH_SHORT).show();}} else {Toast.makeText(LoginActivity.this, "请正确输入您的帐号密码",Toast.LENGTH_SHORT).show();}}});Button button2 = (Button) findViewById(R.id.button1);button2.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {Intent intent = new Intent(LoginActivity.this,RegisterActivity.class);startActivity(intent);}});}//将数据存储进入共享参数public boolean saveMsg(String fileName, Map<String, Object> map) {boolean flag = false;// 一般Mode都使用private,比较安全SharedPreferences preferences = getSharedPreferences(fileName,Context.MODE_PRIVATE);SharedPreferences.Editor editor = preferences.edit();// Map类提供了一个称为entrySet()的方法,这个方法返回一个Map.Entry实例化后的对象集。// 接着,Map.Entry类提供了一个getKey()方法和一个getValue()方法,// 因此,上面的代码可以被组织得更符合逻辑for (Map.Entry<String, Object> entry : map.entrySet()) {String key = entry.getKey();Object object = entry.getValue();// 根据值得不同类型,添加if (object instanceof Boolean) {Boolean new_name = (Boolean) object;editor.putBoolean(key, new_name);} else if (object instanceof Integer) {Integer integer = (Integer) object;editor.putInt(key, integer);} else if (object instanceof Float) {Float f = (Float) object;editor.putFloat(key, f);} else if (object instanceof Long) {Long l = (Long) object;editor.putLong(key, l);} else if (object instanceof String) {String s = (String) object;editor.putString(key, s);}}flag = editor.commit();return flag;}// 读取数据public Map<String, ?> getMsg(String fileName) {Map<String, ?> map = null;// 读取数据用不到editSharedPreferences preferences = getSharedPreferences(fileName,Context.MODE_APPEND);//Context.MODE_APPEND可以对已存在的值进行修改map = preferences.getAll();return map;}}

Android开发之自动登录功能的实现相关推荐

  1. 一篇文章带你搞定 SpringBoot 配合 SpringSecurity 实现自动登录功能

    自动登录是我们在软件开发时一个非常常见的功能,例如我们登录 QQ 邮箱: 很多网站我们在登录的时候都会看到类似的选项,毕竟总让用户输入用户名密码是一件很麻烦的事. 自动登录功能就是,用户在登录成功后, ...

  2. android微信支付都需要什么意思,Android开发微信APP支付功能的要点小结

    基本概念 包名值得是你APP的包,在创建工程时候设置的,需要在微信支付平台上面设置. 签名指的是你生成APK时候所用的签名文件的md5,去掉:全部小写,需要在微信支付平台上面设置. 调试阶段,签名文件 ...

  3. java 自动登录功能_jsp实现用户自动登录功能

    理解并掌握cookie的作用以及利用cookie实现用户的自动登录功能,实现下图效果 当服务器判断出该用户是首次登录的时候,会自动跳转到登录界面等待用户登录,并填入相关信息.通过设置cookie的有效 ...

  4. 业务系统实现记住密码和自动登录功能

    业务系统实现记住密码和自动登录功能 公司的业务系统本来是受域控的,用户不需要登录可以直接访问系统.当然,虽然不用人工登录,系统本身会读取电脑的用户名为登录标识,对系统操作权限和记录也是以电脑名.近段时 ...

  5. react招聘项目——使用cookie实现项目自动登录功能

    cookie实现自动登录功能 最近在项目中使用了cookie实现自动登录的功能,下面我将使用项目中的例子来对cookie进行简单的分析. 功能需求是:在用户访问网址的时候,使用cookie对用户的操作 ...

  6. python 自动登录网站_python实现网站用户名密码自动登录功能

    一.概述 公司需要通过网页用户认证登录实现上网,网络设备判断当前帐号12小时没有没上网将会自动断开帐号上网,每天早上上班第一件事就是打开用户认证网页输入. 用户名与密码,有时候要家里通过teamvie ...

  7. android 仿微信demo————登录功能实现(服务端)

    android 仿微信demo----微信启动界面实现 android 仿微信demo----注册功能实现(移动端) android 仿微信demo----注册功能实现(服务端) android 仿微 ...

  8. 网站1周内自动登录功能实现

    在很多比较大型的网址例如:CSDN,大家在登录时候会有一个[下次自动登录]的功能,该功能与我们的1周内自动登录功能基本类似.所谓的自动登录无非就是,绕过登录界 面,自动登录到系统主页. 自动登录的原理 ...

  9. Android开发实例-自动生成题库的数独

    本系列文章主要介绍如何利用Android开发一个自动生成题目的数独游戏.涉及的知识和技术如下所示: 挖洞算法自动生成数独题目实现自定义View用于绘制数独盘数据库的基本操作 看着市场上千篇一律的数独应 ...

最新文章

  1. 云计算自动化对于虚拟化环境意味着什么?
  2. python把英语句子成分字母_英语句子成分-谓语讲解 什么是谓语?(
  3. Django 之多对多关系
  4. js date 当前日志往后一个月_【应用实例】如何利用 Python 生成器 yield 监控日志?...
  5. 面对非线性可分的情况怎么处理
  6. [PE格式分析] 3.IMAGE_NT_HEADER
  7. oracle 树查询语句,oracle 树查询 语句
  8. createprocess失败代码2_DevOPS | 基于sonarqube、jenkins和gitlab的持续集成代码检查
  9. 安卓 camera 调用流程_安卓如何做出微信那样的界面仿微信“我”的界面1/5
  10. 澄海哪里学机器人编程_少年学机器人编程
  11. css选择器思维导图
  12. 处理文章附件路径问题
  13. 计算机组成与体系结构(软件设计师备考笔记)
  14. 共享黑名单是行业潜规则
  15. 西游记中揭示的深刻人生哲理
  16. 电脑出现missing operating system解决办法
  17. Driller工具分析
  18. 制作原型工具_15种顶级原型制作工具齐头并进
  19. Qt编写数据可视化大屏界面电子看板系统
  20. Quillbot:英语到英语的屠龙剑

热门文章

  1. 计算机基础理论汇编,计算机基础知识:计算机中的汇编语言
  2. php类对象无法转还子符串问题,php – 类stdClass的对象无法转换为字符串
  3. c#json对象转数组_数组和对象的区别
  4. springboot原生mysql写法_【Rainbond最佳实践】Spring Boot框架配置MySQL
  5. java.net.uri,java.net.uri
  6. php禁止伪造_php防止伪造的数据从URL提交方法
  7. Python知识点8——文件与异常
  8. create_pose算子说明
  9. 聊聊storm的direct grouping
  10. 这才是我想要的云盘工具