在《Android 在内部存储读写文件》一文中,谈到了登录用户名和密码的方法,通过读取内存文件来实现,但是会出现问题,因为登录名和密码的形式通过username##password的形式,读取的时候以##为分割线,但是一旦用户名中存在##就会出现问题,本文使用SharedPreference来解决这个问题

1. 定义布局
使用之前的布局
2. 把组件的状态用SharedPreference保存起来

* 往SharedPreference里写数据

//拿到一个SharedPreference对象
SharedPreferences sp = getSharedPreferences("config", MODE_PRIVATE);
//拿到编辑器
Editor ed = sp.edit();
ed.putBoolean("checkBox", isChecked);
ed.commit();

* 从SharedPreference里取数据

SharedPreferences sp = getSharedPreferences("config", MODE_PRIVATE);
//从SharedPreference里取数据
boolean b = sp.getBoolean("checkBox", false);

简化后的代码如下:

  1. package com.wuyudong.sharedpreference;
  2.  
  3. import android.os.Bundle;
  4. import android.app.Activity;
  5. import android.content.SharedPreferences;
  6. import android.content.SharedPreferences.Editor;
  7. import android.view.Menu;
  8. import android.view.View;
  9. import android.widget.EditText;
  10.  
  11. public class MainActivity extends Activity {
  12.  
  13. @Override
  14. protected void onCreate(Bundle savedInstanceState) {
  15. super.onCreate(savedInstanceState);
  16. setContentView(R.layout.activity_main);
  17. // 获取到SharedPreference对象
  18. SharedPreferences sp = getSharedPreferences("info", MODE_PRIVATE);
  19. //获取sp中的内容
  20. String name = sp.getString("name", "");
  21. String pass = sp.getString("pass", "");
  22. EditText et_name = (EditText) findViewById(R.id.et_name);
  23. EditText et_pass = (EditText) findViewById(R.id.et_pass);
  24. //数据回显至输入框
  25. et_name.setText(name);
  26. et_pass.setText(pass);
  27. }
  28.  
  29. public void click(View v) {
  30. EditText et_name = (EditText) findViewById(R.id.et_name);
  31. EditText et_pass = (EditText) findViewById(R.id.et_pass);
  32.  
  33. String name = et_name.getText().toString();
  34. String pass = et_pass.getText().toString();
  35.  
  36. // 获取到SharedPreference对象
  37. SharedPreferences sp = getSharedPreferences("info", MODE_PRIVATE);
  38. // 得到编辑器
  39. Editor ed = sp.edit();
  40. ed.putString("name", name);
  41. ed.putString("pass", pass);
  42. ed.commit();
  43. }
  44.  
  45. }

其实android中的很多设置都用到了SharedPreference

例如

查看com.android.settings/shared_prefs下的com.android.settings_preferences.xml文件

  1. <?xml version='1.0' encoding='utf-8' standalone='yes' ?>
  2. <map>
  3. <boolean name="sound_effects" value="true" />
  4. <boolean name="com.android.inputmethod.latin/.LatinIME" value="true" />
  5. <boolean name="force_hw_ui" value="false" />
  6. <boolean name="jp.co.omronsoft.openwnn/.OpenWnnJAJP" value="false" />
  7. <boolean name="auto_time" value="false" />
  8. <boolean name="show_hw_screen_udpates" value="false" />
  9. <boolean name="24 hour" value="true" />
  10. <boolean name="dock_sounds" value="false" />
  11. <string name="font_size">1.30</string>
  12. <boolean name="allow_mock_location" value="false" />
  13. <boolean name="keep_screen_on" value="false" />
  14. <boolean name="show_hw_layers_udpates" value="false" />
  15. <string name="date_format"></string>
  16. <boolean name="enable_adb" value="false" />
  17. <boolean name="enforce_read_external" value="false" />
  18. <boolean name="show_touches" value="false" />
  19. <boolean name="dtmf_tone" value="true" />
  20. <boolean name="strict_mode" value="false" />
  21. <boolean name="com.example.android.softkeyboard/.SoftKeyboard" value="false" />
  22. <boolean name="show_hw_overdraw" value="false" />
  23. <boolean name="auto_zone" value="false" />
  24. <string name="hdcp_checking">drm-only</string>
  25. <boolean name="show_cpu_usage" value="false" />
  26. <boolean name="debug_layout" value="false" />
  27. <boolean name="com.android.inputmethod.pinyin/.PinyinIME" value="false" />
  28. <boolean name="pointer_location" value="false" />
  29. <boolean name="disable_overlays" value="false" />
  30. <boolean name="bugreport_in_power" value="false" />
  31. <boolean name="haptic_feedback" value="true" />
  32. <boolean name="immediately_destroy_activities" value="false" />
  33. <boolean name="show_all_anrs" value="false" />
  34. <boolean name="verify_apps_over_usb" value="false" />
  35. <boolean name="lock_sounds" value="true" />
  36. <boolean name="show_screen_updates" value="false" />
  37. <boolean name="force_msaa" value="false" />
  38. <boolean name="wait_for_debugger" value="false" />
  39. </map>

Android SharedPreference的使用的更多相关文章

  1. Android SharedPreference 数据存储

    参考:http://www.cnblogs.com/friends-wf/p/4835818.html 应用开发过程中,数据存储几乎是肯定会遇到的问题,根据要存储的数据类型和数量,可以选择合适的存储方 ...

  2. Android SharedPreference最佳实践

    Android提供多种方式保存应用数据,其中一种方式是SharedPreferences,使用键值对保存私有基本的数据.所有的逻辑仅基于以下三个类: SharedPreferences SharedP ...

  3. [android] sharedPreference入门

    /********************2016年5月6日 更新**************************************/ 知乎:Android 如何实现判断用户首次使用,比如首 ...

  4. Android SharedPreference

    在Android开发过程中,Android提供了SharedPreference共享首选项,它的用途就是,用于保存软件配置信息,APP使用过程中,需要用到的配置信息,例如:音量大小等: SharedP ...

  5. Android [SharedPreference轻量级存储]

    SharedPreferencesActivity.java package com.xdw.a122.data; import android.content.SharedPreferences; ...

  6. Android应用开发-护眼提醒-总结篇

    设计初衷: 在学习<第一行代码>的服务那章时,涉及到了alarmmanager的内容.然后笔者当时正好在关注"程序猿怎样保护眼睛"的问题. 于是便自己做了一个demo, ...

  7. Android简单介绍SharedPreference,内部文件,sdcard数据存储

    SharedPreference 以xml的结构储存简单的数据,储存在data/data/程序包名/shared_prefs文件夹中 使用方式 创建对象的方式有三种 Context 的 getShar ...

  8. android——利用SharedPreference做引导界面

    很久以前就接触过sharedPreference这个android中的存储介质.但是一直没有实际使用过,今天在看之前做的“民用机型大全”的app时,突然想到可以使用sharedPreference类来 ...

  9. Android开发学习---sharedpreference的使用

    在前面文章中,为了使数据回显,使用的技术思路是,首先,将数据持久化写到ROM或者SDCard中,其中name和password以":"分隔;然后,将数据记取出来,再用split方法 ...

随机推荐

  1. 精品资源:40个实用的 PSD 贴纸模板《下篇》

    贴纸经常被网页设计师用于为标注网站中的不同元素,以此吸引访客的注意.此外,使用贴纸也使网站更具吸引力.虽然设计者可以使用 Photoshop 制作贴纸,但他们也可以利用从互联网上下载现成的模板.这些模 ...

  2. jQuery 图像裁剪插件Jcrop

    ,    // 设置框的最大宽度          setSelect: [ 175, 100, 400, 300 ]        });                $('#text-input ...

  3. Android SDK Android NDK Android Studio 官方下载地址

    2016.12 Android Studio Windows Includes Android SDK https://dl.google.com/dl/android/studio/install/ ...

  4. 【原创】kafka controller源代码分析(一)

    Kafka集群中的一个broker会被作为controller负责管理分区和副本的状态以及执行类似于重分配分区之类的管理任务.如果当前的controller失败了,会从剩下的broker中选出新的co ...

  5. 在Winform开发中使用日程控件XtraScheduler

    在一些应用场景中,我们可能需要记录某一天,某个时段的日程安排,那么这个时候就需要引入了DevExpress的日程控件XtraScheduler了,这个控件功能非常强大,提供了很好的界面展现方式,以及很 ...

  6. 自己动手,让Entity Framework Power Tools在VS2015重放光彩

    Entity Framework Power Tools是一个由EntityFramework开发小组提供的工具,它可以从现有数据库生成Fluent款式的Code First代码. VS Galler ...

  7. 基于吉日嘎底层架构的Web端权限管理操作演示-组织机构管理

    软件是服务组织的系统,而任何组织一定会涉及到权限:所以权限控制是一个系统的核心基础,不管你做啥系统都逃不过:有人的地方就有江湖,有系统就有权限管理. 今天我们继续讲一下组织机构的管理: 新增.修改.锁 ...

  8. Yii2所提倡的配置管理方案

    无意中看到Yii2提供的高级应用模板,里面将入口文件与环境相关配置项放到独立的目录下的相应文件中.这应该算是一种比较理想的应用配置管理方案了. 以前整理过一种思路:http://www.cnblogs ...

  9. jquery easyui 弹出消息框 (转载) jQuery EasyUI API 中文文档 - 消息框(Messager) http://www.cnblogs.com/hantianwei/archive/2012/03/19/2407113.html

    <html> <head> <!-- 导入easyui插件的js和css样式; --> <link rel="stylesheet" ty ...

  10. centos6配置vnc登录远程物理机及vb复制vdi启动虚拟机网络问题

    1.安装vnc和vncserver #yum install tigervnc tigervnc-server 2.启动VNC服务# vncserverYou will require a passw ...