SharedPreferences小细节
废话不多讲,直接入题:以下,SharedPreferences小马就简称SP了: SP一般建议在全局文件中操作,即:在继承Application的扩展类中操作,这样做的原因是SP只是为了存储一些应用及游戏配置,并不能存储大量数据,而且操作次数也不会太过频繁,因此建议在全局中操作和使用哦: 先来看下效果图:主要看效果图下面的讲解,嘿嘿 将XML文件导出后的结果如下图: packagecom.mzh.www; importandroid.app.Activity; importandroid.content.Context; importandroid.content.Intent; importandroid.content.SharedPreferences; importandroid.os.Bundle; importandroid.preference.Preference; importandroid.preference.PreferenceActivity; importandroid.preference.PreferenceManager; importandroid.view.View; importandroid.view.View.OnClickListener; importandroid.widget.Button; importandroid.widget.EditText; importandroid.widget.Toast; /** *@Title:SharedPreferencesDemo.java *@Packagecom.mzh.www *@Description:SharedPreferences数据存储测试 *@authormzh *@versionV2.2 */ publicclassSharedPreferencesDemoextendsActivity{ //声明 privateEditTextXM; privateEditTextNL; privateEditTextSG; privateButtonsaveBtn; privateButtoncancelBtn; //SharedPreferences //SP文件名 privatestaticfinalStringPREFERENCES_NAME="XiaoMa_Guo"; /** *存储模式: *有四种模式,如果叠加模式可用以下写法,小马此例中仅叠加两种 *MODE_PRIVATE默认的模式,一般情况下使用 *MODE_WORLD_READABLE全局读 *MODE_WORLD_WRITEABLE全局写 *MODE_MULTI_PROCESS多进程间访问使用 *以上模式中全局指在任何地方都可以访问,至于操作得看是可以读还是可以写啦 */ privatestaticfinalintPREFERENCES_MODE =Context.MODE_WORLD_READABLE +Context.MODE_WORLD_WRITEABLE; /**Calledwhentheactivityisfirstcreated.*/ @Override publicvoidonCreate(BundlesavedInstanceState){ 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); } /** *监听哭实现 */ privateOnClickListenerlistener=newOnClickListener(){ @Override publicvoidonClick(Viewv){ //TODOAuto-generatedmethodstub switch(v.getId()){ caseR.id.Save: saveSharedPreferences(); break; caseR.id.Cancel: finish(); break; default: break; } } /** *实现往SP中存值 */ privatevoidsaveSharedPreferences(){ //这个地方取SP文件的方式有两种: //方法一如下: //这种方式是取得指定的那个SP文件 SharedPreferencessharedPreferences= getSharedPreferences(PREFERENCES_NAME,PREFERENCES_MODE); //下面贴下getSharedPreferences方法的源码: /**小马英语一般,刚看这个很怕,但可以借助工作查嘛,朋友们也可以自己尝试下翻译它 *Retrieveandholdthecontentsofthepreferencesfile'name',returning *aSharedPreferencesthroughwhichyoucanretrieveandmodifyits *values.OnlyoneinstanceoftheSharedPreferencesobjectisreturned *toanycallersforthesamename,meaningtheywillseeeachother's *editsassoonastheyaremade. * *@paramnameDesiredpreferencesfile.Ifapreferencesfilebythisname *doesnotexist,itwillbecreatedwhenyouretrievean *editor(SharedPreferences.edit())andthencommitchanges(Editor.commit()). *@parammodeOperatingmode.Use0or{@link#MODE_PRIVATE}forthe *defaultoperation,{@link#MODE_WORLD_READABLE} *and{@link#MODE_WORLD_WRITEABLE}tocontrolpermissions. * *@returnReturnsthesingleSharedPreferencesinstancethatcanbeused *toretrieveandmodifythepreferencevalues. * *@see#MODE_PRIVATE *@see#MODE_WORLD_READABLE *@see#MODE_WORLD_WRITEABLE *写这么一大段,意思一句总结,就是有多个SP文件存在时,可以用指定的SP文件名与模式取SP文件,简单吧?而且这个里面的文件 *名可以自定义,如果文件不存在,它会自动创建的啦,如:XiaoMaGuo.xml *SharedPreferencesaPrefs=getSharedPreferences("XiaoMaGuo",0); publicabstractSharedPreferencesgetSharedPreferences(Stringname, intmode); */ /*//方法二如下: //这种方式是取得默认的那个SP文件 sharedPreferencessp=PreferenceManager.getDefaultSharedPreferences(this);*/ //下面贴段源码,加深上PreferenceManager方式的理解: /** *Usedtohelpcreate{@linkPreference}hierarchies *fromactivitiesorXML. *<p> *Inmostcases,clientsshoulduse别的先不看,这句意思:在有多个分支,或者说多个SP文件时 *{@linkPreferenceActivity#addPreferencesFromIntent}or这个的意思是:从匹配的Intent中加载SP文件 *{@linkPreferenceActivity#addPreferencesFromResource(int)}.这个意思是:通过指定的XML文件,将加载此 *XML文件到当前SP层级中,也就是把指定的XML文件加载到当前的配置中来,吼吼 * *@seePreferenceActivity publicclassPreferenceManager{*/ //取编辑对象的方法一样 SharedPreferences.Editoreditor=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(); Intentintent=newIntent(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,如需转载请自行联系原作者