在《》一文中,谈到了登录用户名和密码的方法,通过读取内存文件来实现,但是会出现问题,因为登录名和密码的形式通过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);简化后的代码如下:
package com.wuyudong.sharedpreference;import android.os.Bundle;import android.app.Activity;import android.content.SharedPreferences;import android.content.SharedPreferences.Editor;import android.view.Menu;import android.view.View;import android.widget.EditText;public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 获取到SharedPreference对象 SharedPreferences sp = getSharedPreferences("info", MODE_PRIVATE); //获取sp中的内容 String name = sp.getString("name", ""); String pass = sp.getString("pass", ""); EditText et_name = (EditText) findViewById(R.id.et_name); EditText et_pass = (EditText) findViewById(R.id.et_pass); //数据回显至输入框 et_name.setText(name); et_pass.setText(pass); } public void click(View v) { EditText et_name = (EditText) findViewById(R.id.et_name); EditText et_pass = (EditText) findViewById(R.id.et_pass); String name = et_name.getText().toString(); String pass = et_pass.getText().toString(); // 获取到SharedPreference对象 SharedPreferences sp = getSharedPreferences("info", MODE_PRIVATE); // 得到编辑器 Editor ed = sp.edit(); ed.putString("name", name); ed.putString("pass", pass); ed.commit(); }}
其实android中的很多设置都用到了SharedPreference
例如
查看com.android.settings/shared_prefs下的com.android.settings_preferences.xml文件