Android SharedPreferences实现记住密码和自动登录
本文实例为大家分享了Android SharedPreferences实现记住密码和自动登录,供大家参考,具体内容如下
效果图:
第一次进入进来
勾选记住密码和自动登录成功后,第二次进来
说明:中间存在的图片或者多余的其他部分可删掉。留下最主要的填写部分和登陆按钮即可。功能还是可以实现的。
XML文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="@drawable/bj"
tools:context="com.example.application.MainActivity">
<ImageView
android:layout_marginTop="50dp"
android:layout_width="100dp"
android:layout_height="100dp"
android:src="@drawable/login_tx_1"
android:layout_gravity="center"
/>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<EditText
android:layout_width="300dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:focusable="true"
android:focusableInTouchMode="true"
android:clickable="true"
android:hint="请输入账号"
android:gravity="center"
android:paddingRight="100dp"
android:id="@+id/login_uname"
/>
<TextView
android:layout_width="38dp"
android:layout_height="33dp"
android:layout_marginLeft="30dp"
android:padding="6dp"
android:gravity="center"
android:drawableLeft="@drawable/uname"
/>
</FrameLayout>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<EditText
android:layout_width="300dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:focusable="true"
android:focusableInTouchMode="true"
android:clickable="true"
android:hint="请输入密码"
android:gravity="center"
android:paddingRight="100dp"
android:password="true"
android:id="@+id/login_upass"
/>
<TextView
android:layout_width="38dp"
android:layout_height="33dp"
android:layout_marginLeft="30dp"
android:padding="6dp"
android:gravity="center"
android:drawableLeft="@drawable/upass"
/>
</FrameLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
>
<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="记住密码"
android:id="@+id/login_auto"
/>
<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="50dp"
android:text="自动登录"
android:id="@+id/login_btn"
/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:layout_margin="15dp"
>
<ImageButton
android:layout_width="40dp"
android:layout_height="40dp"
android:src="@drawable/login_qq"
/>
<ImageButton
android:layout_width="40dp"
android:layout_height="40dp"
android:src="@drawable/login_weixin"
android:layout_marginLeft="60dp"
/>
<ImageButton
android:layout_width="40dp"
android:layout_height="40dp"
android:src="@drawable/login_xinlan"
android:layout_marginLeft="60dp"
android:id="@+id/login_xinlan"
/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<Button
android:layout_width="240dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:background="@drawable/a_radio_button_selector_1"
android:gravity="center"
android:text="登录"
android:id="@+id/login_login"
/>
<Button
android:layout_width="240dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="20dp"
android:background="@drawable/a_radio_button_selector_1"
android:gravity="center"
android:text="忘记密码"
android:id="@+id/login_find"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="20dp"
android:text="没有账号,立即注册"
android:textColor="#6efafa"
android:textSize="15dp"
android:onClick="JumpRegister"
/>
</LinearLayout>
</LinearLayout>
Java文件
package com.example.application;
import android.content.Intent;
import android.content.SharedPreferences;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.Window;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.Toast;
import com.sun.util.DBHelper;
import java.util.HashMap;
import cn.sharesdk.framework.Platform;
import cn.sharesdk.framework.PlatformActionListener;
import cn.sharesdk.framework.ShareSDK;
import cn.sharesdk.sina.weibo.SinaWeibo;
public class MainActivity extends AppCompatActivity {
public static String LoginUid=null;
public static String LoginName=null;
private Button login_login;
private Button login_find;
private EditText login_uname;
private EditText login_upass;
private CheckBox login_auto;
private CheckBox login_btn;
private SharedPreferences sp;
private ImageButton login_xinlan;
private Platform weibo;
private DBHelper dbHelper;
private SQLiteDatabase sqLiteDatabase;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
//获取控件
login_uname = (EditText) findViewById(R.id.login_uname);
login_upass = (EditText) findViewById(R.id.login_upass);
login_auto = (CheckBox) findViewById(R.id.login_auto); //记住密码
login_btn = (CheckBox) findViewById(R.id.login_btn); //自动登录
login_login = (Button) findViewById(R.id.login_login); //登录
login_find = (Button) findViewById(R.id.login_find);
login_xinlan = (ImageButton) findViewById(R.id.login_xinlan);
//调用数据库
dbHelper = new DBHelper(this,"dtb.db",null,1);
sqLiteDatabase = dbHelper.getWritableDatabase();
//第三方登录
weibo = ShareSDK.getPlatform(SinaWeibo.NAME);
login_xinlan.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//回调信息,可以在这里获取基本的授权返回的信息,但是注意如果做提示和UI操作要传到主线程handler里去执行
weibo.setPlatformActionListener(new PlatformActionListener
() {
@Override
public void onComplete(Platform platform, int i, HashMap<String, Object> hashMap) {
String openid = platform.getDb().getUserId();
String nickname = platform.getDb().getUserName();
Cursor cursor=sqLiteDatabase.rawQuery("select * from dtb_users where uname=?",new String[]{openid});
LoginUid=cursor.getString(cursor.getColumnIndex("uid"));
if(cursor.moveToNext()){
Log.i("test","已经注册过!");
}else{
sqLiteDatabase.execSQL("insert into dtb_users(uname,upass,name,levelnumber) values('"+openid+"','null','"+nickname+"','"+1+"')");
}
//跳转
MainActivity.LoginName=openid;
Intent intent=new Intent(MainActivity.this,MainMianActivity.class);
startActivity(intent);
}
@Override
public void onError(Platform arg0, int arg1, Throwable arg2) {
// TODO Auto-generated method stub
arg2.printStackTrace();
}
@Override
public void onCancel(Platform arg0, int arg1) {
// TODO Auto-generated method stub
}
});
//authorize与showUser单独调用一个即可
weibo.authorize();//单独授权,OnComplete返回的hashmap是空的
weibo.showUser(null);//授权并获取用户信息
//移除授权
// weibo.removeAccount(true);
}
});
//自动登录判断
sp = this.getSharedPreferences("userInfo",0);
String name=sp.getString("USER_NAME", "");
String pass =sp.getString("PASSWORD", "");
boolean choseRemember =sp.getBoolean("remember", false);
boolean choseAutoLogin =sp.getBoolean("autologin", false);
//如果上次选了记住密码,那进入登录页面也自动勾选记住密码,并填上用户名和密码
if(choseRemember){
login_uname.setText(name);
login_upass.setText(pass);
login_auto.setChecked(true);
}
//如果上次登录选了自动登录,那进入登录页面也自动勾选自动登录
if(choseAutoLogin){
login_btn.setChecked(true);
Cursor cursor= sqLiteDatabase.rawQuery("select * from dtb_users where uname=? and upass=?",new String[]{name,pass});
if(cursor.moveToNext()){
new LoginThread().start();
LoginName=name;
LoginUid=cursor.getString(cursor.getColumnIndex("uid"));
}
}
// 登录监听事件 现在默认为用户名为:admin 密码:123
login_login.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String userName=login_uname.getText().toString();
String userPass=login_upass.getText().toString();
SharedPreferences.Editor editor =sp.edit();
Cursor cursor= sqLiteDatabase.rawQuery("select * from dtb_users where uname=? and upass=?",new String[]{userName,userPass});
if(cursor.moveToNext()){//判断是否查询到此数据
Toast.makeText(MainActivity.this,"登录成功", Toast.LENGTH_SHORT).show();
LoginName=userName;
LoginUid=cursor.getString(cursor.getColumnIndex("uid"));
//是否记住密码
//记住用户名、密码、
editor.putString("USER_NAME", userName);
editor.putString("PASSWORD",userPass);
if(login_auto.isChecked()){
editor.putBoolean("remember", true);
}else{
editor.putBoolean("remember", false);
}
//是否自动登录
if(login_btn.isChecked()){
editor.putBoolean("autologin", true);
}else{
editor.putBoolean("autologin", false);
}
editor.commit();
//跳转界面
Intent intent = new Intent(MainActivity.this,MainMianActivity.class);
startActivity(intent);
Toast.makeText(MainActivity.this, "登录成功!", Toast.LENGTH_SHORT).show();
// finish();
}else{
Toast.makeText(MainActivity.this,"用户名或密码错误,请重新登录", Toast.LENGTH_LONG).show();
}
}
});
}
public void JumpRegister(View view){
Intent intent=new Intent(this,RegisterActivity.class);
startActivity(intent);
finish();
}
//子线程 控制自动睡眠2秒钟后自动登录
class LoginThread extends Thread{
@Override
public void run() {
try {
sleep(2000);
Intent intent = new Intent(MainActivity.this,MainMianActivity.class);
startActivity(intent);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
Demo下载:记住密码和自动登录
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
以上是 Android SharedPreferences实现记住密码和自动登录 的全部内容, 来源链接: utcz.com/p/241890.html