SharedPreferences记住用户密码 态判断应用是否首次启动等

原创 2016年08月30日 18:46:34

一、Android SharedPreferences的简介

SharedPreferences是一种轻型的Android数据存储方式,它的本质是基于XML文件存储key-value键值对数据,通常用来存储一些简单的配置信息。其存储位置在/data/data/<包名>/shared_prefs目录下。SharedPreferences对象本身只能获取数据而不支持存储和修改,存储修改是通过Editor对象实现。比较经典的使用方式例如用户输入框对过往登录账户的存储。实现SharedPreferences存储的步骤如下:
1、根据Context获取SharedPreferences对象
2、利用edit()方法获取Editor对象。
3、通过Editor对象存储key-value键值对数据。
4、通过commit()方法提交数据。

二、SharedPreferences和Editor 的关系

1、SharedPreferences

public abstract SharedPreferences getSharedPreferences (String name, int mode)

方法得到一个sharedpreferences对象,参数name是preference文件的名字,mode则是方式,默认为0。

2、Editor

Editor可用于SharedPreferences数据的添加,删除,修改和查询。

Public abstract SharedPreferences.Editor putString (String key,String value)

通过执行commit()或是apply()方法,将会应用更改。


实例一记住密码功能的实现:

import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.Bundle;
import android.view.View;
import android.widget.CheckBox;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // 读取sharedprefs中的值,并设置给对应的控件
        readShared();
    }

    private void readShared() {
        // 1.获取sharedprefs对象实例
        SharedPreferences shared = getSharedPreferences("sharedprefs",
                MODE_PRIVATE);
        // 2.利用sharedprefs实例按key-value形式读取对应值
        boolean value=shared.getBoolean("remind", false);
        // 3.把读取出来的值设置给对应控件或对象
        CheckBox cb=(CheckBox) findViewById(R.id.cb);
        cb.setChecked(value);

    }

    // 点击记住密码
    public void remind(View view) {
        // 向sharedpresf写入当前CheckBox的状态
        // 1.获取sharedprefs对象实例
        SharedPreferences shared = getSharedPreferences("sharedprefs",
                MODE_PRIVATE);
        // 2.利用sharedperfs实例获取Editor对象
        Editor editor = shared.edit();
        // 3.利用Editor写入对应的值:key-value
        editor.putBoolean("remind", ((CheckBox) view).isChecked());
        // 4.提交:commit
        editor.commit();
    }
}

实例二:判断应用是否第一次启动

import android.app.Activity;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.Bundle;
import android.widget.TextView;

/**
 * 每次进入该Activity时,判断sharedprefs中是否有写入过值
 * 
 * 如果已经写过了,说明已经启动过
 * 
 * 如果没有写,则说明没启动过,再写入一个值
 * 
 */
public class MainActivity extends Activity {

    TextView tv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tv = (TextView) findViewById(R.id.tv);
        // 先读再写
        readShared();
    }

    private void readShared() {
        // 1.获取sharedprefs对象
        SharedPreferences shared = getSharedPreferences("firstRun",
                MODE_PRIVATE);
        // 2.读取对应值,如果没读取到该值,表明是第一次启动
        boolean isFirst = shared.getBoolean("isFirst", true);
        // 设置一段文本给TextView
        if (isFirst) {
            tv.setText("这是第一次启动");
            // 向sharedprefs写入值,表明已经启动过了
            // 获取Editor对象
            Editor editor = shared.edit();
            // 写值
            editor.putBoolean("isFirst", false);
            // commit
            editor.commit();
        } else {
            tv.setText("已经启动过了");
        }
    }

使用SharedPreferences的注意点 :

如果使用SharedPreferences用于数据存取,大部分人喜欢使用如下代码:

public void writeSharedprefs(int pos) {

    SharedPreferences preferences = getApplicationContext().getSharedPreferences("test", Context.MODE_PRIVATE);
    SharedPreferences.Editor editor = preferences.edit();
    editor.putInt("pos", pos);
    editor.commit();

}

public int writeSharedprefs() {
    SharedPreferences preferences = getApplicationContext().getSharedPreferences("test", Context.MODE_PRIVATE);
    int pos = preferences.getInt("pos", 0);
    return pos;
}

但很多人忽略了一点,就是跨进程使用的时候,你就会发现从SharedPreferences读出来的数据永远都是第一次写入的数据。 举例,例如播放器是一个独立进程,另外某个Activity是另一个独立进程,播放器与这个Activity利用SharedPreferences通信的时候,如果使用MODE_PRIVATE操作模式,就会出错。


所以,如果跨进程使用SharedPreferences的使用,需要使用MODE_MULTI_PROCESS模式,代码如下:
public void writeSharedprefs(int pos) {

    SharedPreferences preferences = getApplicationContext().getSharedPreferences("test", Context.MODE_MULTI_PROCESS);
    SharedPreferences.Editor editor = preferences.edit();
    editor.putInt("pos", pos);
    editor.commit();

}

public int writeSharedprefs() {
    SharedPreferences preferences = getApplicationContext().getSharedPreferences("test", Context.MODE_MULTI_PROCESS);
    int pos = preferences.getInt("pos", 0);
    return pos;
}

版权声明:本文为博主原创文章,转载请注明出处

iOS开发笔记--应用首次启动显示用户引导

这个功能的重点就是在如何判断应用是第一次启动的. 其实很简单 我们只需要在一个类里面写好用户引导页面  基本上都是使用UIScrollView 来实现, 新建一个继承于UIViewCont...
  • errvv
  • errvv
  • 2016年01月25日 09:57
  • 146

iOS开发之应用首次启动显示用户引导

这个功能的重点就是在如何判断应用是第一次启动的. 其实很简单 我们只需要在一个类里面写好用户引导页面  基本上都是使用UIScrollView 来实现, 新建一个继承于UIViewCont...

iOS开发之应用首次启动显示用户引导 - 疯狂的萝卜 - 博客园

iOS开发之应用首次启动显示用户引导   这个功能的重点就是在如何判断应用是第一次启动的. 其实很简单 我们只需要在一个类里面写好用户引导页面  基本上都是使用UIScrollVie...

iOS开发之应用首次启动显示用户引导

这个功能的重点就是在如何判断应用是第一次启动的. 其实很简单 我们只需要在一个类里面写好用户引导页面  基本上都是使用UIScrollView 来实现, 新建一个继承于UIViewCont...

iOS 开发之应用首次启动显示用户引导

这个功能的重点就是在如何判断应用是第一次启动的. 其实很简单 我们只需要在一个类里面写好用户引导页面  基本上都是使用UIScrollView 来实现, 新建一个继承于UIViewControll...
  • kiki1985
  • kiki1985
  • 2013年03月26日 10:15
  • 10448

iOS开发之应用首次启动显示用户引导

这个功能的重点就是在如何判断应用是第一次启动的. 其实很简单 我们只需要在一个类里面写好用户引导页面  基本上都是使用UIScrollView 来实现, 新建一个继承于UIViewCont...

iOS开发之应用首次启动显示用户引导

这个功能的重点就是在如何判断应用是第一次启动的. 其实很简单 我们只需要在一个类里面写好用户引导页面  基本上都是使用UIScrollView 来实现, 新建一个继承于UIViewControll...

iOS开发之应用首次启动显示用户引导

这个功能的重点就是在如何判断应用是第一次启动的. 其实很简单 我们只需要在一个类里面写好用户引导页面  基本上都是使用UIScrollView 来实现, 新建一个继承于UIViewCont...

WP8 软件首次启动时用户引导页面的实现

一、首先判断应用程序是否首次启动。 /// /// 判断是否为第一次启动应用程序 /// /// protecte...
  • f10_s
  • f10_s
  • 2013年08月02日 19:06
  • 2016

windowsphone开发日记(一)--应用首次启动显示介绍页

个人YY部分,
  • PIEr_mx
  • PIEr_mx
  • 2014年11月19日 11:32
  • 2043
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:SharedPreferences记住用户密码 态判断应用是否首次启动等
举报原因:
原因补充:

(最多只允许输入30个字)