Android数据存储:SharedPreferences 登录账号

前言:

笔记:此次简单的登录是对课本中的数据存储进行练习,比较简单;其中圆形图片是学习他人所得,具体忘记是谁看了太多就不@了OvO。
演示效果:

一、布局文件

首先上效果图

大概就是这样,弄得比较简单

<?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/background"
    tools:context=".MainActivity">
    
    <com.example.logintest.ImageRound
        android:layout_width="120dp"
        android:layout_height="120dp"
        android:layout_gravity="center"
        android:layout_marginTop="100dp"
        android:scaleType="centerCrop"
        android:src="@drawable/login1" />
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="15dp"
        android:background="@android:color/white"
        android:orientation="horizontal">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:padding="10dp"
            android:text="账号:"
            android:textSize="20dp" />

        <EditText
            android:id="@+id/et_account"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="5dp"
            android:background="@null"
            android:inputType="textPersonName"
            android:padding="10dp"
            android:textSize="20dp" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="15dp"
        android:background="@android:color/white"
        android:orientation="horizontal">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:padding="10dp"
            android:text="密码:"
            android:textSize="20dp" />

        <EditText
            android:id="@+id/et_password"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="5dp"
            android:background="@null"
            android:inputType="textPassword"
            android:padding="10dp"
            android:textSize="20sp" />

    </LinearLayout>

    <Button
        android:id="@+id/btn_login"
        android:layout_width="150dp"
        android:layout_height="wrap_content"
        android:layout_marginLeft="124dp"
        android:layout_marginTop="30dp"
        android:backgroundTint="#03A9F4"
        android:text="登录"
        android:textColor="#FFFFFF"
        android:textSize="20sp" />

二、ImageRound类和SpSaveAccount类

自己创建的类,imageRound继承AppCompatImageView,SpSaveAccount封装了保存账号,获取账号两个方法,方便使用。

1、ImageRound类

public class ImageRound extends AppCompatImageView {
    
    

        笔画
    private Paint imagePaint;
    //    圆形半径
    private int imageRadius;
    //    圆形的缩放比例
    private float imageScle;

    public ImageRound(Context context) {
    
    
        super(context);
    }

    public ImageRound(Context context, AttributeSet attrs) {
    
    
        super(context, attrs);
    }

    public ImageRound(Context context, AttributeSet attrs, int defStyleAttr) {
    
    
        super(context, attrs, defStyleAttr);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    
    
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);

        int width=getMeasuredWidth();
        int height=getMeasuredHeight();

        int size=Math.min(width,height);
        imageRadius=size/2;
        setMeasuredDimension(size,size);
    }

    @Override
    protected void onDraw(Canvas canvas) {
    
    
        imagePaint=new Paint();
        Drawable drawable=getDrawable();
        if(drawable!=null){
    
    
            Bitmap bitmap=drawableToBitmap(getDrawable());

//            BitmapShader(传入bitmap对象,X轴的平铺模式,y轴的平铺模式)
//            平铺模式:Shader.TileMode.CLAMP:如果着色器超出原始边界范围,会复制边缘颜色
            BitmapShader bitmapShader=new BitmapShader(bitmap, Shader.TileMode.CLAMP,Shader.TileMode.CLAMP);
//            计算缩放比例
            imageScle=(imageRadius*2.0f)/Math.min(bitmap.getHeight(),bitmap.getWidth());
            Matrix matrix=new Matrix();
            matrix.setScale(imageScle,imageScle);
            bitmapShader.setLocalMatrix(matrix);
            imagePaint.setShader(bitmapShader);
//          drawCircle方法(圆心的x坐标,圆心的y坐标,圆半径,画笔):绘制圆形
            canvas.drawCircle(imageRadius,imageRadius,imageRadius,imagePaint);

        }else {
    
    
            super.onDraw(canvas);
        }

    }

    //    drawable转BitMap的方法
    private Bitmap drawableToBitmap(Drawable drawable){
    
    
        if (drawable instanceof BitmapDrawable) {
    
    
            BitmapDrawable bitmapDrawable=(BitmapDrawable) drawable;
            return bitmapDrawable.getBitmap();
        }
        int w = drawable.getIntrinsicWidth();
        int h = drawable.getIntrinsicHeight();
        Bitmap bitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(bitmap);
        drawable.setBounds(0, 0, w, h);
        drawable.draw(canvas);
        return bitmap;
    }
}

2、SpSaveAccount类

public class SpSaveAccount {
    
    

    //    保存账号
    public static void saveUserInfo(Context context,String account,String password){
    
    
        SharedPreferences sharedPreferences=context.getSharedPreferences("user",Context.MODE_PRIVATE);
        SharedPreferences.Editor editor=sharedPreferences.edit();
        editor.putString("userId",account);
        editor.putString("password",password);
        editor.commit();
    }
    //    读取账号
    public static Map<String,String> getUserInfo(Context context){
    
    
        SharedPreferences sharedPreferences=context.getSharedPreferences("user",Context.MODE_PRIVATE);
        String account=sharedPreferences.getString("userId",null);
        String pwd=sharedPreferences.getString("password",null);

        Map<String,String> userMap=new HashMap<String,String>();
        userMap.put("account",account);
        userMap.put("password",pwd);
        return userMap;
    }
}

三、MainActivity

public class MainActivity extends AppCompatActivity {
    
    

    private Button btnLogin;
    private EditText etName,etPwd;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    
    
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        etName=findViewById(R.id.et_account);
        etPwd=findViewById(R.id.et_password);
        btnLogin=findViewById(R.id.btn_login);
//      登录账号
        btnLogin.setOnClickListener(new View.OnClickListener() {
    
    
            @Override
            public void onClick(View view) {
    
    

                String account=etName.getText().toString().trim();
                String pwd=etPwd.getText().toString();

//                账户输入如果为空
                if(TextUtils.isEmpty(account)||TextUtils.isEmpty(pwd)){
    
    
                    Toast.makeText(MainActivity.this,"账号密码输入不能为空",Toast.LENGTH_SHORT).show();
                    return;
                }
                SpSaveAccount.saveUserInfo(MainActivity.this,account,pwd);
                Toast.makeText(MainActivity.this,"登录成功",Toast.LENGTH_SHORT).show();
            }
        });
//        获取账号并将其显示出来
        Map<String,String> userMap=SpSaveAccount.getUserInfo(MainActivity.this);
        if(userMap!=null){
    
    
            etName.setText(userMap.get("account"));
            etPwd.setText(userMap.get("password"));
        }
    }
}

猜你喜欢

转载自blog.csdn.net/qq_47229902/article/details/125073564