ShardPreferences 保存登录状态

http://blog.sina.com.cn/s/blog_7ab107b00100u78t.html


做软件开发应该都知道,很多软件会有配置文件,里面存放这程序运行当中的各个属性值,由于其配置信息并不多,如果采用数据库来存放并不划算,因为数据库连接跟操作等耗时大大影响了程序的效率,因此我们使用键值这种一一对应的关系来存放这些配置信息。SharedPreferences正是Android中用于实现这中存储方式的技术。

 

SharedPreferences的使用非常简单,能够轻松的存放数据和读取数据。SharedPreferences只能保存简单类型的数据,例如,String、int等。一般会将复杂类型的数据转换成Base64编码,然后将转换后的数据以字符串的形式保存在 XML文件中,再用SharedPreferences保存。

 
       使用SharedPreferences保存key-value对的步骤如下:

  (1)使用Activity类的getSharedPreferences方法获得SharedPreferences对象,其中存储key-value的文件的名称由getSharedPreferences方法的第一个参数指定。

  (2)使用SharedPreferences接口的edit获得SharedPreferences.Editor对象。

  (3)通过SharedPreferences.Editor接口的putXxx方法保存key-value对。其中Xxx表示不同的数据类型。例如:字符串类型的value需要用putString方法。

  (4)通过SharedPreferences.Editor接口的commit方法保存key-value对。commit方法相当于数据库事务中的提交(commit)操作。

 

具体代码的书写流程为:

 

A、存放数据信息

1、打开Preferences,名称为setting,如果存在则打开它,否则创建新的Preferences

SharedPreferences settings = getSharedPreferences(“setting”, 0);

2、让setting处于编辑状态

SharedPreferences.Editor editor = settings.edit();

3、存放数据

editor.putString(“name”,”ATAAW”);
editor.putString(“URL”,”ATAAW.COM”);

4、完成提交

editor.commit();

B、读取数据信息

1、获取Preferences

SharedPreferences settings = getSharedPreferences(“setting”, 0);

2、取出数据

String name = settings.getString(“name”,”默认值”);
String url = setting.getString(“URL”,”default”);

以上就是Android中SharedPreferences的使用方法,其中创建的Preferences文件存放位置可以在Eclipse中查看:

DDMS->File Explorer /<package name>/shared_prefs/setting.xml

 

主要代码 具体如下(仅供参考):

在onCreate方法中调用restorePrefs()方法:

 

//读取     功能的实现
    private void restorePrefs() {
  // TODO Auto-generated method stub
     //SharedPreferences是一种轻量级的数据存储方式.是以键值对来存储应用程序的
       //配置信息的一种方式,它只能存储基本数据类型。
     //声明一个优先级设置 类型 settings,载入配置文件


  SharedPreferences settings = getPreferences(BMI.MODE_PRIVATE);

  //使用getXXX函数从优先级设置读取不同类型的内容 得到优先级设置参数的内容


  String pref_height = settings.getString(PREF_HEIGHT, "");

  //此一句为唤醒记忆语句


   field_height.setText(pref_height);
   field_weight.requestFocus();//设置焦点字段 到“体重”字段上 用户只需直接输入体重数字就可以了

 }
   
    //存储    在Activity每次变暗,也就是离开当前屏幕时,记住设置的身高值     即 存储优先级设置
    protected void onPause()
    {
     super.onPause();
     Log.v("BMI", "onPause1");
     //获得SharedPreferences对象


     SharedPreferences settings = getPreferences(BMI.MODE_PRIVATE);


     //获得SharedPreferences.Editor


     SharedPreferences.Editor editor = settings.edit();


     //保存组件的值   为优先级设置填写不同类型的内容
     //用"field_height"界面组件标识符来取得身高的字符串 然后保存到PREF_HEIGHT所代表的优先级设置参数中


     editor.putString(PREF_HEIGHT, field_height.getText().toString());


     //提交保存的结果   将改变写到系统中


     editor.commit();
    }



SharedPreferences存储类效率分析

SharedPreferences是Android平台上一个轻量级的存储类,主要是保存一些常用的配置比如窗口状态,一般在Activity中重载窗口状态onSaveInstanceState保存一般使用SharedPreferences完成,它提供了Android平台常规的Long长整形、Int整形、String字符串型的保存,它是什么样的处理方式呢?

 SharedPreferences类似过去Windows系统上的ini配置文件,但是它分为多种权限,可以全局共享访问,android123提示最终是以xml方式来保存,整体效率来看不是特别的高,对于常规的轻量级而言比SQLite要好不少,如果真的存储量不大可以考虑自己定义文件格式。xml处理时Dalvik会通过自带底层的本地XML Parser解析,比如XMLpull方式,这样对于内存资源占用比较好。

--------------------------------------------------------------------------------------------------------------------------

SharedPreferences 的用法

2个activity 之间的数据传递除了可以他通过intent来传递,还可以使用SharedPreferences来共享数据的方式

SharedPreferences 用法很简单.

在A中设置

[java]  view plain  copy
  1. Editor sharedata = getSharedPreferences("data"0).edit();    
  2. sharedata.putString("item","hello getSharedPreferences");    
  3. sharedata.commit();    

B中获取

[java]  view plain  copy
  1. SharedPreferences sharedata = getSharedPreferences("data"0);    
  2. String data = sharedata.getString("item"null);    
  3. Log.v("cola","data="+data);    

Android数据存取之Preferences

这种方式应该是用起来最简单的Android读写外部数据的方法了。他的用法基本上和J2SE(Java.util.prefs.Preferences)中的用法一样,以一种简单、透明的方式来保存一些用户个性化设置的字体、颜色、位置等参数信息。一般的应用程序都会提供“设置”或者“首选项”的这样的界面,那么这些设置最后就可以通过Preferences来保存,而程序员不需要知道它到底以什么形式保存的,保存在了什么地方。当然,如果你愿意保存其他的东西,也没有什么限制。只是在性能上不知道会有什么问题。

在Android系统中,这些信息以XML文件的形式保存在 /data/data/PACKAGE_NAME/shared_prefs目录下。

数据读取

  1. String PREFS_NAME = "Note.sample.roiding.com";   
  2.   
  3. SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);   
  4.   
  5. boolean silent = settings.getBoolean("silentMode"false);   
  6.   
  7. String hello = settings.getString("hello""Hi");    
 
[java]  view plain  copy
  1. String PREFS_NAME = "Note.sample.roiding.com";  
  2. SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);  
  3. boolean silent = settings.getBoolean("silentMode"false);  
  4. String hello = settings.getString("hello""Hi");  
这段代码中:
  • SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
    通过名称,得到一个SharedPreferences,顾名思义,这个Preferences是共享的,共享的范围据现在同一个Package中,这里面说所的Package和Java里面的那个Package不同,貌似这里面的Package是指在AndroidManifest.xml文件中:
    Xml代码   收藏代码
    1. <manifest xmlns:android="http://schemas.android.com/apk/res/android"   
    2. package="com.roiding.sample.note"   
    3. android:versionCode="1"   
    4. android:versionName="1.0.0">    
     
    [html]  view plain  copy
    1. <manifest xmlns:android="http://schemas.android.com/apk/res/android"  
    2. package="com.roiding.sample.note"  
    3. android:versionCode="1"  
    4. android:versionName="1.0.0">  

    这里面的package。根据我目前的实验结果看,是这样的,欢迎指正。后面的那个int是用来声明读写模式,先不管那么多了,暂时就知道设为0(android.content.Context.MODE_PRIVATE)就可以了。

  • boolean silent = settings.getBoolean(”silentMode”, false);
    获得一个boolean值,这里就会看到用Preferences的好处了:可以提供一个缺省值。也就是说如果Preference中不存在这个值的话,那么就用后面的值作为返回指,这样就省去了我们的if什么什么为空的判断。

数据写入

[java]  view plain  copy
  1. String PREFS_NAME = "Note.sample.roiding.com";     
  2. SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);     
  3. SharedPreferences.Editor editor = settings.edit();     
  4. editor.putBoolean("silentMode"true);     
  5. editor.putString("hello""Hello~");     
  6. editor.commit();     
 
[java]  view plain  copy
  1. String PREFS_NAME = "Note.sample.roiding.com";  
  2. SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);  
  3. SharedPreferences.Editor editor = settings.edit();  
  4. editor.putBoolean("silentMode"true);  
  5. editor.putString("hello""Hello~");  
  6. editor.commit();  

有了上面数据读取的代码,这里面的就容易理解了,只是别忘了最后的commit();

注意:

访问接口和优先修改数据,并由getSharedPreferences(String,int)返回数据,为了统一设置参数,有一个单例类供所有的客户端共享.修改参数必须通过一个SharedPreferences.Editor对象,在存储他们时,以确保参数值有统一的状态和控制
目前此类不支持多线程,


转自:http://xusaomaiss.iteye.com/blog/378524

package com.example.administrator.myapplication;

import android.content.DialogInterface;
import android.content.SharedPreferences;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity  implements View.OnClickListener {

    private TextView mTextView;
    private Button mShowInfoBtn,mDelInfoBtn;


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


        mTextView = (TextView) findViewById(R.id.tv);
        mShowInfoBtn = (Button) findViewById(R.id.showInfo);
        mDelInfoBtn = (Button) findViewById(R.id.delInfo);

        SharedPreferences per = getSharedPreferences("MyPer",MODE_PRIVATE);
        SharedPreferences.Editor editor =per.edit();

        mShowInfoBtn.setOnClickListener(this);
        mDelInfoBtn.setOnClickListener(this);

        mTextView.setText(per.getString("name","hah"));

        editor.putString("name","逗你玩");
        editor.putInt("年龄",12);
        editor.putBoolean("default",true);
        editor.commit();
        editor.remove("default");
        editor.commit();



        Log.e("ShredPreferences",per.getString("name1","hahh"));
    }

    @Override
    public void onClick(View view) {
        SharedPreferences per = getSharedPreferences("MyPer",MODE_PRIVATE);
        SharedPreferences.Editor editor =per.edit();
        switch (view.getId()){
            case R.id.showInfo:

                mTextView.setText(per.getString("name","hah"));
                break;

            case R.id.delInfo:
                editor.remove("name");

                editor.commit();
                break;
        }
    }

//    private SharedPreferences getPreferences(String myPer, int modePrivate) {
//
//
//    }
}





<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    android:orientation="vertical"
    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"
     tools:context="com.example.administrator.myapplication.MainActivity">

    <TextView
        android:id="@+id/tv"
        android:textSize="20dp"
        android:text="Hello World!"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />


    <Button
        android:id="@+id/showInfo"
        android:text="获取信息"
        android:layout_width="match_parent"
        android:layout_height="40dp" />

    <Button
    android:id="@+id/delInfo"
    android:layout_marginTop="40dp"
    android:text="清除信息"
    android:layout_width="match_parent"
    android:layout_height="40dp" />


    <Button
        android:id="@+id/AddInfo"
        android:layout_marginTop="40dp"
        android:text="写入数据"
        android:layout_width="match_parent"
        android:layout_height="40dp" />

</LinearLayout>


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值