Android数据存储(一)——SharedPreferences

1.什么是数据存储

1.运行内存 == 电脑内存;
2.机身内部存储器 == 电脑硬盘;

手机内部存储器(核心文件夹)

1./system系统文件夹类似于Windows中的Windows文件夹。

2./data应用程序安装文件和数居文件( 存放在这个目录下的数据文件称之为内部存储)。

3./mnt/sdcard外部存储根文件夹,用于存放各种文件(存放在此目录中的文件称之为外部存储)。

4./storage/emulated/0外部存储根文件夹,有些手机存放在/mnt/sdcard 文件夹下,有些手机存放在/storage/emulated/0下。

什么是手机内存

手机内存:手机内存分为运行内存和机身内存,运行内存是指手机运行程序时的内存,机身内存是用来存储系统,应用文件以及其他文件的“硬盘”。

Android文件夹划分:存放在/data 目录下文件称之为外部存储。存放在/mnt或/storage或者其他可存储文件位置的目录称之为外部存储。

在商业APP中经常需要收集用户的信息,保存配置信息等,这些数据都必须以某种方式保存,不能丢失,并且能够有效,简洁地使用和更新处理,这种保存数据的方式称之为数据存储。

数据存储分类

1.SharedPreferences存储
2.File存储
3.数据库存储

SharedPreferences存储

SharedPreferences常用来存储一些轻量级的数据,以key-value( 键值对)形式存储数据,当用户卸载此应用程序时,数据会并清除。

File存储

1.内部存储
将文件存在/data目录下,称之为内部存储。Android系统提供了相应的API,可以直接把文件存在设备的内部存储内,通过Java的I/O流的方式进行读写,当用户卸载此应用程序时,内部存储的数据会一并清除。
2.外部存储
将文件存在用户自己添加的外部存储介质中(/data以外的目录),称之为外部存储,在Java中已经学过I/O流的知识,在Android中的操作和在Java学习I/O流时的操作基本一致。

数据库存储

当需要保存的数据量大,数据格式复杂时,需要用到数据库存储。

如何使用数据存储

1.使用SharedPreferences读写数据
2.使用File内部存储读写数据

什么是SharedPreferences存储

1.SharedPreferences是Android平台上一个轻量级的存储类,用来存储少量数据时简单,便捷(如:保存记住密码状态,设置开关状态等)。
2.以key—value( 键值对)形式存储数据,可以存储的数据类型为:String,float,int,long,boolean。
3.存储位置在/data/data/<包名>/shared_prefs目录下。
4.保存的数据以XML形式存储。

使用SharedPreferences写入数据步骤

1.获得使用SharedPreferences对象。
2.获得Editor对象。
3.通过Editor对象的putXXX函数,设置写入数据。
4.通过Editor对象的commit提交写入。

获取SharedPreferences对象

SharedPreferences对象:在有Context环境中使用getSharedPreferences方法获得

getSharedPreferences方法参数:

1.name:要保存的文件名
2.mode:
Context.MODE_PRIVATE:默认操作模式,代表该文件是私有数据,只能被应用本身访问。
Context.MODE_APPEND:该模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件。

登录页面保存用户名密码实例

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    >
    <EditText
        android:id="@+id/Et1"
        android:layout_width="match_parent"
        android:layout_height="50dp" />

    <EditText
        android:id="@+id/Et2"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:inputType="textPassword"/>
    <CheckBox
        android:id="@+id/Cb1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    <CheckBox
        android:id="@+id/Cb2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    <Button
        android:id="@+id/Bt1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="登录"/>
</LinearLayout>
package com.example.pc.sharedpreferences;

import android.content.SharedPreferences;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    private EditText Et1;
    private EditText Et2;
    private CheckBox Cb1;
    private CheckBox Cb2;
    private Button Bt1;
    private int rememberFlag = 0;
    private String password;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        bindID();
        //从sp文件(mysp.xml)里取出“name”节点对应的值
        SharedPreferences sharedPreferences = getSharedPreferences("mysp.xml",MODE_PRIVATE);
        if (sharedPreferences != null){
            //取值
            String name = sharedPreferences.getString("name","");
            password =sharedPreferences.getString("password","");

            rememberFlag = sharedPreferences.getInt("remember_flag",0);

            //赋值给Et1保存用户名
            Et1.setText(name);


        }
        if (rememberFlag == 1){
            Cb1.setChecked(true);
            Et2.setText(password);
        }

        Bt1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String username = Et1.getText().toString();
                String password = Et2.getText().toString();

                //1.创建SharedPreferences对象
                SharedPreferences spf = getSharedPreferences("mysp.xml",MODE_PRIVATE);
                //2.创建Editor对象,写入值
                SharedPreferences.Editor editor = spf.edit();
                editor.putString("name",username);

                if (Cb1.isChecked()){
                    //按下按钮
                    rememberFlag =1;
                    editor.putInt("remember_flag",rememberFlag);
                    editor.putString("password",password);
                }else {
                    rememberFlag =0;
                    editor.putInt("remember_flag",rememberFlag);
                }

                //提交
                editor.commit();

                Toast.makeText(MainActivity.this,"登录成功",Toast.LENGTH_SHORT).show();
            }
        });



    }

    private void bindID() {
        Et1 = findViewById(R.id.Et1);
        Et2 = findViewById(R.id.Et2);
        Cb1 = findViewById(R.id.Cb1);
        Cb2 = findViewById(R.id.Cb2);
        Bt1 = findViewById(R.id.Bt1);
    }
}
发布了12 篇原创文章 · 获赞 18 · 访问量 6188
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览