Android数据存储方式之SharedPreferences

1、Android存储数据的四种方式

这里写图片描述

2、什么是SharedPreferences

SharedPreferences是一种轻量级的数据存储方式,它可以用键值对的方式把简单数据类型(boolean、int、float、long和String)存储在应用程序的私有目录下(data/data/[包名] /shared_prefs/)自己定义的xml文件中。

SharedPreferences是以键值对来存储应用程序的配置信息的一种方式,它只能存储基本数据类型。一个程序的配置文件仅可以在本应用程序中使用,或者说只能在同一个包内使用,不能在不同的包之间使用。实际上sharedPreferences是采用了XML格式将数据存储到设备中,在DDMS 中的File Explorer中的/data/data//shares_prefs下。
(以上解释来源于http://www.oschina.net/question/54100_31831)

这里写图片描述

3、SharedPreferences方法简介

这里写图片描述

4、SharedPreferences

代码实例
这里写图片描述
1、生成默认SharedPreferences
2、生成自定义SharedPreferences对象javaSharedPreferences mpref = getSharedPreferences("mypref", MODE_PRIVATE);这里我们使用getSharedPreferences()方法传入两个参数分别为SharedPreferences对象名以及权限。
3、如果我们要对其进行编辑还需要一个Editor对象使用该方法生成。
4、需要注意的是必须使用commit()方法之后才会生效。
通过DDMS查看文件结果如图:
这里写图片描述
补充:
这里写图片描述
使用getXXX方法取到信息两个参数分别表示键名,若找不到的情况下的默认显示。

5、使用SharedPreferences保存用户名密码实例

这里写图片描述
我们使用SharedPreferences存储用户名当用户勾选保存用户名时默认下次打开程序用户名不用再输入。

5.1UI界面

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:orientation="vertical"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.liujing.sharedpreferencesdemo.MainActivity">

    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <TextView
            android:id="@+id/textview_username"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="用户名:" />

        <EditText
            android:paddingLeft="4dp"
            android:hint="请输入用户名"
            android:id="@+id/edittext_username"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
    </LinearLayout>

    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="密码:" />

        <EditText
            android:hint="请输入密码"
            android:paddingLeft="4dp"
            android:id="@+id/edittext_pwd"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
    </LinearLayout>
    <CheckBox
        android:id="@+id/checkbox"
        android:text="保存用户名"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <Button
            android:id="@+id/btn_login"
            android:text="登录"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
        <Button
            android:text="取消"
            android:id="@+id/cancle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    </LinearLayout>

</LinearLayout>

我们使用LinearLayout进行嵌套设置对应UI界面即可。

5.2主程序

这里写图片描述
首先实例化控件
这里写图片描述
每次层序打开时我们先做一个判断是否有保存过用户名,若用户名为空不够线保存用户名的单选框否则勾选,并将用户名显示出来。
这里写图片描述
若用户点击取消按钮则将信息清空,并取消勾选。
这里写图片描述
若用户点击登录按钮我们首先通过代码

String name = medittextusername.getText().toString().trim();
String pwd = medittextpwd.getText().toString().trim();

得到用户输入的用户名及密码,若用户名和密码都正确并且用户点击就将用户名保存,下次登录就不用再输入了。如果用户没有点击就将刚刚输入的用户名删除。

完整代码如下:


import android.app.Activity;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends Activity {
    EditText medittextusername;
    EditText medittextpwd;
    CheckBox checkBox;
    Button btnlogin;
    Button btncancle;
    SharedPreferences pref;

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

        medittextusername = (EditText) findViewById(R.id.edittext_username);
        medittextpwd = (EditText) findViewById(R.id.edittext_pwd);
        checkBox = (CheckBox) findViewById(R.id.checkbox);
        btnlogin = (Button) findViewById(R.id.btn_login);
        btncancle = (Button) findViewById(R.id.cancle);
        pref = getSharedPreferences("mpref",MODE_PRIVATE);
        final SharedPreferences.Editor editor = pref.edit();
        if(medittextusername.getText()==null){
            checkBox.setChecked(false);
        }else{
            medittextusername.setText(pref.getString("username",""));
            checkBox.setChecked(true);
        }
        btncancle.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                medittextusername.setText("");
                medittextpwd.setText("");
                checkBox.setChecked(false);
            }
        });

        btnlogin.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String name = medittextusername.getText().toString().trim();
                String pwd = medittextpwd.getText().toString().trim();
                if("admin".equals(name)&&"123456".equals(pwd)){
                    if(checkBox.isChecked()){
                        editor.putString("username",name);
                        editor.commit();
                    }else{
                        editor.remove("username");
                        editor.commit();
                    }
                    Toast.makeText(MainActivity.this,"登录成功",Toast.LENGTH_SHORT).show();
                }else{
                    medittextusername.setText("");
                    medittextpwd.setText("");
                    checkBox.setChecked(false);
                    Toast.makeText(MainActivity.this,"登录失败",Toast.LENGTH_SHORT).show();
                }
            }
        });

    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值