IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> android学习(4) -> 正文阅读

[移动开发]android学习(4)

17.键值对数据存储SharedPreferences介绍

(1)介绍

SharedPreferences是一种轻量级的数据存储方式,采用键值对的存储方式。

SharedPreferences只能存储少量数据,大量数据不能使用该方式存储,支持存储的数据类型有booleans, floats, ints, longs, and strings。

SharedPreferences存储到一个XML文件中的

(2)向 Shared preferences 文件写入数据

? 1)首先必须获得 SharedPreferences.Editor 对象;

? 2)通过 putInt()putString() 等方式写入键值对数据;

? 3)△最后通过调用 apply()commit() 方法保存数据

(3)从 Shared preferences 文件读取数据

首先获得文件对应的 SharedPreferences 对象;

通过 getInt()getString() 等方法指定 key 获取数据;

(4)学习使用 Shared preferences:登录时记住密码

登录布局源代码如下:

<?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"
    tools:context=".MainActivity">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:layout_marginTop="48dp"
        >

        <ImageView
            android:layout_width="150dp"
            android:layout_height="150dp"
            android:layout_centerInParent="true"
            android:src="@drawable/ic_logo2"
            />
    </RelativeLayout>

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="40dp"
        android:layout_marginTop="48dp">

        <ImageView
            android:layout_width="32dp"
            android:layout_height="32dp"
            android:layout_marginBottom="4dp"
            android:layout_alignParentBottom="true"
            android:src="@drawable/ic_baseline_person_outline_24"/>

        <EditText
            android:id="@+id/et_Account"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_gravity="center"
            android:layout_marginStart="48dp"
            android:layout_marginEnd="48dp"
            android:layout_marginBottom="2dp"
            android:hint="Email/Account"
            android:inputType="text"
            android:maxLines="1" />
    </RelativeLayout>
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="40dp"
        android:layout_marginTop="20dp">
        <ImageView
            android:layout_width="32dp"
            android:layout_height="32dp"
            android:layout_marginBottom="4dp"
            android:layout_alignParentBottom="true"
            android:src="@drawable/ic_baseline_lock_24"/>

        <EditText
            android:id="@+id/et_pwd"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_gravity="center"
            android:layout_marginStart="48dp"
            android:layout_marginEnd="48dp"
            android:layout_marginBottom="2dp"
            android:hint="Password"
            android:inputType="textPassword"
            android:maxLines="1" />
        <ImageView
            android:layout_width="24dp"
            android:layout_height="24dp"
            android:src="@drawable/ic_baseline_visibility_off_24"
            android:layout_marginBottom="6dp"
            android:id="@+id/iv_pwd_switch"
            android:layout_centerInParent="true"
            android:layout_alignParentEnd="true"
            />
    </RelativeLayout>

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="40dp"
        android:layout_marginTop="16dp">

        <CheckBox
            android:id="@+id/cb_remember_pwd"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentStart="true"
            android:layout_alignParentBottom="true"
            android:layout_marginLeft="8dp"
            android:layout_marginBottom="4dp"
            android:text="remeber password"
            android:textColor="@color/teal_700" />
        <TextView
            android:text="sign up"
            android:textColor="@color/teal_700"
            android:id="@+id/tv_sign_up"
            android:layout_alignBaseline="@+id/cb_remember_pwd"
            android:layout_marginEnd="8dp"
            android:layout_width="wrap_content"
            android:layout_alignParentEnd="true"
            android:layout_alignParentBottom="true"
            android:layout_height="wrap_content"/>
    </RelativeLayout>

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:layout_marginTop="48dp">

        <Button
            android:id="@+id/bt_login"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="32dp"
            android:text="Login"
            android:textColor="@color/white" />
    </RelativeLayout>

</LinearLayout>

MainActivity.java

package com.example.code05;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.text.InputType;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity implements View.OnClickListener{

    private EditText etPwd;
    private Boolean bPwdSwitch = false;
    private EditText etAccount;
    private CheckBox cbRemeberPwd;
    private Button btLogin;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        final ImageView ivpwdswitch = findViewById(R.id.iv_pwd_switch);
        etPwd = findViewById(R.id.et_pwd);
        etAccount = findViewById(R.id.et_Account);
        cbRemeberPwd = findViewById(R.id.cb_remember_pwd);


        //获取string文件中的资源
        String spFileName = getResources().getString(R.string.shared_preferences_file_name);
        String accountKey = getResources().getString(R.string.login_account_name);
        String passwordKey = getResources().getString(R.string.login_password);
        String rememberPasswordKey = getResources().getString(R.string.login_remember_password);

        SharedPreferences spFile = getSharedPreferences(spFileName, MODE_PRIVATE);
        String account = spFile.getString(accountKey,null);
        String password = spFile.getString(passwordKey,null);

//        String rememberPassword = spFile.getString(rememberPasswordKey,"false");
        boolean rememberPassword = spFile.getBoolean(rememberPasswordKey,false);

        if(account != null && !TextUtils.isEmpty(account)){
            etAccount.setText(account);
        }

        if(password != null && !TextUtils.isEmpty(password)){
            etPwd.setText(password);
        }

        cbRemeberPwd.setChecked(rememberPassword);

//      密码明文转换
        ivpwdswitch.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                bPwdSwitch = !bPwdSwitch;
                if(bPwdSwitch){
                    ivpwdswitch.setImageResource(R.drawable.ic_baseline_visibility_24);
                    etPwd.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);
                }
                else {
                    ivpwdswitch.setImageResource(R.drawable.ic_baseline_visibility_off_24);
                    etPwd.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD |
                            InputType.TYPE_CLASS_TEXT);
                }
            }
        });

        btLogin = findViewById(R.id.bt_login);
        if (btLogin!=null) {
            btLogin.setOnClickListener(this);
        }
    }

    /**
     * 实现记住密码
     */
    @Override
    public void onClick(View v) {
//        Toast.makeText(MainActivity.this, "Hello World!",
//                Toast.LENGTH_SHORT).show();
        String spFileName = getResources().getString(R.string.shared_preferences_file_name);
        String accountKey = getResources().getString(R.string.login_account_name);
        String passwordKey = getResources().getString(R.string.login_password);
        String rememberPasswordKey = getResources().getString(R.string.login_remember_password);

        SharedPreferences spFile = getSharedPreferences(spFileName ,Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = spFile.edit();


        if(cbRemeberPwd.isChecked()){

            String password = etPwd.getText().toString();
            String account = etAccount.getText().toString();

            editor.putString(accountKey,account);
            editor.putString(passwordKey,password);
            editor.putBoolean(rememberPasswordKey,true);
            editor.apply();
        }else {
            editor.remove(accountKey);
            editor.remove(passwordKey);
            editor.remove(rememberPasswordKey);
            editor.apply();
        }
    }
}

18.布尔bool转变成String类

Bollean.getBollean(String s)

19.运行项目时总是出现Waiting for all target devices to come online

翻译成中文的意思是:等待所有目标设备上线

刚开始还以为是网络连接不通畅,后来百度一下发现不是。

可用的方法有:

(1).换一台运行模拟器

(2).打开AVD Manager,对相应的模拟器进行数据删除
在这里插入图片描述

在这里插入图片描述

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-12-14 16:03:59  更:2021-12-14 16:04:46 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 8:36:37-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码