职业IT人-IT人生活圈

 找回密码
 成为会员
搜索
查看: 2370|回复: 9

Android的存储神器:SharedPreferences

  [复制链接]
江波 发表于 2011-9-19 11:47 | 显示全部楼层 |阅读模式
  
很多时候我们开发的软件需要保存一些用户设置的信息,例如是否记住密码、显示的字体大小等等。如果是window软件通常我们会采用ini文件进行保存,如果是j2se应用,我们会采用properties属性文件进行保存。

在Android国度里,我们使用SharedPreferences是最合适不过的了,SharedPreferences是一个轻量级的存储类,特别适合用于保存软件配置参数。SharedPreferences其背后是用xml文件存放数据,文件存放在/data/data/package name/shared_prefs目录下。

下面我写了一个SharedPreferences_Demo,需要的同志可以Download下来看看。欢迎交流学习。

首先,我写了一个工具类,用来进行SharedPreferences的相关操作:

Java代码  
package com.iteye.dengwho;   
  
import android.content.Context;   
import android.content.SharedPreferences;   
import android.content.SharedPreferences.Editor;   
  
public class SharedPreferencesUtil {   
    private SharedPreferences sp;   
    private Editor editor;   
    private final static String SP_NAME = "mydata";   
    private final static int MODE = Context.MODE_WORLD_READABLE   
            + Context.MODE_WORLD_WRITEABLE;   
  
    public SharedPreferencesUtil(Context context) {   
        sp = context.getSharedPreferences(SP_NAME, MODE);   
        editor = sp.edit();   
    }   
  
    public boolean save(String key, String value) {   
        editor.putString(key, value);   
        // 亿万不要忘了加commit呐~~~!!!!   
        return editor.commit();   
    }   
  
    public String read(String key) {   
        String str = null;   
        str = sp.getString(key, null);   
        return str;   
    }   
}  

package com.iteye.dengwho;

import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;

public class SharedPreferencesUtil {
        private SharedPreferences sp;
        private Editor editor;
        private final static String SP_NAME = "mydata";
        private final static int MODE = Context.MODE_WORLD_READABLE
                        + Context.MODE_WORLD_WRITEABLE;

        public SharedPreferencesUtil(Context context) {
                sp = context.getSharedPreferences(SP_NAME, MODE);
                editor = sp.edit();
        }

        public boolean save(String key, String value) {
                editor.putString(key, value);
                // 亿万不要忘了加commit呐~~~!!!!
                return editor.commit();
        }

        public String read(String key) {
                String str = null;
                str = sp.getString(key, null);
                return str;
        }
}

这里我用我的血泪屎来提醒大家在save的操作时1000万不要忘了commit()。
另外,因为SharedPreferences本身就是以XML保存文件的,所以我们不用给它命名时多加“.xml”后缀。

下面是Activity类:

Java代码  
package com.iteye.dengwho;   
  
import android.app.Activity;   
import android.os.Bundle;   
import android.view.View;   
import android.view.View.OnClickListener;   
import android.widget.Button;   
import android.widget.EditText;   
import android.widget.Toast;   
  
public class SharedPreferenced_DemoActivity extends Activity {   
    private Button saveBtn;   
    private Button readBtn;   
    private EditText inputEv;   
    private EditText showEv;   
    private SharedPreferencesUtil util;   
  
    /**  
     * 给控件初始化  
     */  
    public void init() {   
        util = new SharedPreferencesUtil(this);   
        saveBtn = (Button) findViewById(R.id.save_btn);   
        readBtn = (Button) findViewById(R.id.read_btn);   
        inputEv = (EditText) findViewById(R.id.input_et);   
        showEv = (EditText) findViewById(R.id.showinfo_et);   
        // 设置监听   
        setListener();   
    }   
  
    /**  
     * 给Button加监听事件  
     */  
    public void setListener() {   
        saveBtn.setOnClickListener(new OnClickListener() {   
            public void onClick(View v) {   
                boolean b = util.save("mykey", inputEv.getText().toString());   
                String msg;   
                if (b) {   
                    msg = "保存成功";   
                } else {   
                    msg = "保存失败";   
                }   
                Toast.makeText(SharedPreferenced_DemoActivity.this, msg,   
                        Toast.LENGTH_SHORT).show();   
            }   
        });   
  
        readBtn.setOnClickListener(new OnClickListener() {   
            public void onClick(View v) {   
                System.out.println("read...");   
                String value = util.read("mykey");   
                showEv.setText(value);   
            }   
        });   
    }   
  
    @Override  
    public void onCreate(Bundle savedInstanceState) {   
        super.onCreate(savedInstanceState);   
        setContentView(R.layout.main);   
        init();   
    }   
}  

package com.iteye.dengwho;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class SharedPreferenced_DemoActivity extends Activity {
        private Button saveBtn;
        private Button readBtn;
        private EditText inputEv;
        private EditText showEv;
        private SharedPreferencesUtil util;

        /**
         * 给控件初始化
         */
        public void init() {
                util = new SharedPreferencesUtil(this);
                saveBtn = (Button) findViewById(R.id.save_btn);
                readBtn = (Button) findViewById(R.id.read_btn);
                inputEv = (EditText) findViewById(R.id.input_et);
                showEv = (EditText) findViewById(R.id.showinfo_et);
                // 设置监听
                setListener();
        }

        /**
         * 给Button加监听事件
         */
        public void setListener() {
                saveBtn.setOnClickListener(new OnClickListener() {
                        public void onClick(View v) {
                                boolean b = util.save("mykey", inputEv.getText().toString());
                                String msg;
                                if (b) {
                                        msg = "保存成功";
                                } else {
                                        msg = "保存失败";
                                }
                                Toast.makeText(SharedPreferenced_DemoActivity.this, msg,
                                                Toast.LENGTH_SHORT).show();
                        }
                });

                readBtn.setOnClickListener(new OnClickListener() {
                        public void onClick(View v) {
                                System.out.println("read...");
                                String value = util.read("mykey");
                                showEv.setText(value);
                        }
                });
        }

        @Override
        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.main);
                init();
        }
}  


运行界面:

4abd85fc-d5d1-3e36-8ce0-1267fcfa6a63.jpg

保存成功后我们可以找到相应的XML文件:

cd9a49cd-b5d5-3218-9f8e-16f1de0f8321.jpg

我们把XML文件提取出来打开,就可以看到我们保存的Key和Value了


叫我小乖 发表于 2011-9-19 11:47 | 显示全部楼层
把别人的或在说是别的网站的东西直接Ctrl+c -- Ctrl+v好像不太好吧,即使粘贴也要注意排版阿。

芷馨 发表于 2011-9-19 11:48 | 显示全部楼层
名字变了,里面也变了,略伤感...

fl 发表于 2011-9-19 11:48 | 显示全部楼层

你看了我的代码就知道我不是COPY的了,
broken 发表于 2011-9-19 11:49 | 显示全部楼层

排版改好了。你注意看代码的包名

秋秋 发表于 2011-9-19 11:49 | 显示全部楼层
我是来看ID的

gz-vps 发表于 2011-9-19 11:49 | 显示全部楼层
lz这个ID和头像竟然可以管理员通过?

不过一个好处就是,没人敢指名道姓的骂你,哈哈。

找不到我 发表于 2011-9-19 11:49 | 显示全部楼层


新手求教育,被骂是应该的

爱车车 发表于 2011-9-19 11:50 | 显示全部楼层


你可以注册
有烟没火 发表于 2011-9-19 11:50 | 显示全部楼层
这篇写的不错,代码也写的很好。谢谢你了。
您需要登录后才可以回帖 登录 | 成为会员

本版积分规则

QQ|手机版|小黑屋|网站帮助|职业IT人-IT人生活圈 ( 粤ICP备12053935号-1 )|网站地图
本站文章版权归原发布者及原出处所有。内容为作者个人观点,并不代表本站赞同其观点和对其真实性负责,本站只提供参考并不构成任何投资及应用建议。本站是信息平台,网站上部分文章为转载,并不用于任何商业目的,我们已经尽可能的对作者和来源进行了通告,但是能力有限或疏忽造成漏登,请及时联系我们,我们将根据著作权人的要求立即更正或者删除有关内容。

GMT+8, 2024-3-29 16:45 , Processed in 0.166687 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表