废话不多讲,直接入题:以下,SharedPreferences小马就简称SP了:
SP一般建议在全局文件中操作,即:在继承Application的扩展类中操作,这样做的原因是SP只是为了存储一些应用及游戏配置,并不能存储大量数据,而且操作次数也不会太过频繁,因此建议在全局中操作和使用哦:
先来看下效果图:主要看效果图下面的讲解,嘿嘿
将XML文件导出后的结果如下图:
- package com.mzh.www;
- import android.app.Activity;
- import android.content.Context;
- import android.content.Intent;
- import android.content.SharedPreferences;
- import android.os.Bundle;
- import android.preference.Preference;
- import android.preference.PreferenceActivity;
- import android.preference.PreferenceManager;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.widget.Button;
- import android.widget.EditText;
- import android.widget.Toast;
- /**
- * @Title: SharedPreferencesDemo.java
- * @Package com.mzh.www
- * @Description: SharedPreferences数据存储测试
- * @author mzh
- * @version V2.2
- */
- public class SharedPreferencesDemo extends Activity {
- //声明
- private EditText XM ;
- private EditText NL ;
- private EditText SG ;
- private Button saveBtn ;
- private Button cancelBtn;
- //SharedPreferences
- //SP文件名
- private static final String PREFERENCES_NAME = "XiaoMa_Guo";
- /**
- * 存储模式:
- * 有四种模式,如果叠加模式可用以下写法,小马此例中仅叠加两种
- * MODE_PRIVATE 默认的模式,一般情况下使用
- * MODE_WORLD_READABLE 全局读
- * MODE_WORLD_WRITEABLE 全局写
- * MODE_MULTI_PROCESS 多进程间访问使用
- * 以上模式中全局指在任何地方都可以访问,至于操作得看是可以读 还是可以写啦
- */
- private static final int PREFERENCES_MODE
- = Context.MODE_WORLD_READABLE
- +Context.MODE_WORLD_WRITEABLE;
- /** Called when the activity is first created. */
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- //资源定位
- XM = (EditText)findViewById(R.id.XM);
- NL = (EditText)findViewById(R.id.NL);
- SG = (EditText)findViewById(R.id.SG);
- //添加监听
- saveBtn = (Button)findViewById(R.id.Save);
- cancelBtn = (Button)findViewById(R.id.Cancel);
- saveBtn.setOnClickListener(listener);
- cancelBtn.setOnClickListener(listener);
- }
- /**
- * 监听哭实现
- */
- private OnClickListener listener = new OnClickListener() {
- @Override
- public void onClick(View v) {
- // TODO Auto-generated method stub
- switch (v.getId()) {
- case R.id.Save:
- saveSharedPreferences();
- break;
- case R.id.Cancel:
- finish();
- break;
- default:
- break;
- }
- }
- /**
- * 实现往SP中存值
- */
- private void saveSharedPreferences() {
- //这个地方取SP文件的方式有两种:
- //方法一如下:
- //这种方式是取得指定的那个SP文件
- SharedPreferences sharedPreferences =
- getSharedPreferences(PREFERENCES_NAME, PREFERENCES_MODE);
- //下面贴下getSharedPreferences方法的源码:
- /**小马英语一般,刚看这个很怕,但可以借助工作查嘛,朋友们也可以自己尝试下翻译它
- * Retrieve and hold the contents of the preferences file 'name', returning
- * a SharedPreferences through which you can retrieve and modify its
- * values. Only one instance of the SharedPreferences object is returned
- * to any callers for the same name, meaning they will see each other's
- * edits as soon as they are made.
- *
- * @param name Desired preferences file. If a preferences file by this name
- * does not exist, it will be created when you retrieve an
- * editor (SharedPreferences.edit()) and then commit changes (Editor.commit()).
- * @param mode Operating mode. Use 0 or {@link #MODE_PRIVATE} for the
- * default operation, {@link #MODE_WORLD_READABLE}
- * and {@link #MODE_WORLD_WRITEABLE} to control permissions.
- *
- * @return Returns the single SharedPreferences instance that can be used
- * to retrieve and modify the preference values.
- *
- * @see #MODE_PRIVATE
- * @see #MODE_WORLD_READABLE
- * @see #MODE_WORLD_WRITEABLE
- * 写这么一大段,意思一句总结,就是有多个SP文件存在时,可以用指定的SP文件名与模式取SP文件,简单吧?而且这个里面的文件
- * 名可以自定义,如果文件不存在,它会自动创建的啦,如:XiaoMaGuo.xml
- * SharedPreferences aPrefs = getSharedPreferences("XiaoMaGuo", 0);
- public abstract SharedPreferences getSharedPreferences(String name,
- int mode);
- */
- /*//方法二如下:
- //这种方式是取得默认的那个SP文件
- sharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);*/
- //下面贴段源码,加深上PreferenceManager方式的理解:
- /**
- * Used to help create {@link Preference} hierarchies
- * from activities or XML.
- * <p>
- * In most cases, clients should use别的先不看,这句意思:在有多个分支,或者说多个SP文件时
- * {@link PreferenceActivity#addPreferencesFromIntent} or 这个的意思是:从匹配的Intent中加载SP文件
- * {@link PreferenceActivity#addPreferencesFromResource(int)}.这个意思是:通过指定的XML文件,将加载此
- * XML文件到当前SP层级中,也就是把指定的XML文件加载到当前的配置中来,吼吼
- *
- * @see PreferenceActivity
- public class PreferenceManager {*/
- //取编辑对象的方法一样
- SharedPreferences.Editor editor = sharedPreferences.edit();
- if(
- !"".equals(XM.getText().toString())
- &&!"".equals(NL.getText().toString())
- &&!"".equals(SG.getText().toString())
- ){
- editor.putString("Name", XM.getText().toString());
- editor.putInt("Age", Integer.parseInt(NL.getText().toString()));
- editor.putFloat("Height", Float.parseFloat(SG.getText().toString()));
- editor.commit();
- Toast.makeText(SharedPreferencesDemo.this, "数据保存成功!",
- Toast.LENGTH_LONG).show();
- Intent intent = new Intent(SharedPreferencesDemo.this,ShowPreferences.class);
- startActivity(intent);
- }else{
- Toast.makeText(SharedPreferencesDemo.this, "数据不完整,保存失败!", Toast.LENGTH_LONG).show();
- }
- }
- };
- }
最后,小马会把自己的DEMO上传到附件,供跟小马处于同一起跑线上的朋友们学习使用,但不要COPY哦,自己敲一遍就记得比较清楚啦,吼吼, 小马刚开始写文章,如果有错误的地方,请直接批评指出,批评就是对我最好的提高,最后,谢谢看文章的你给小马多提些建议,小马有错的地方肯定不含糊,绝对会改正,谢谢
附件:http://down.51cto.com/data/2359525
本文转自华华世界 51CTO博客,原文链接:http://blog.51cto.com/mzh3344258/747124,如需转载请自行联系原作者