sharedPreferences是android中的一种文件操作的方式,相比java中使用new File操作sharedPreferences更加简单,sharedPreferences一般使用在android程序的配置文件
1,activity_main.xml文件中的数据
<EditText android:id="@+id/text_v1" android:layout_width="match_parent" android:layout_height="40dp" android:gravity="center_horizontal" android:hint="输入框" /> <Button android:id="@+id/Save" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/text_v1" android:onClick="show" android:text="保 存" /> <Button android:id="@+id/clear" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toRightOf="@id/Save" android:layout_below="@id/text_v1" android:onClick="show" android:text="清除输入框" /> <Button android:id="@+id/Read" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/Save" android:onClick="show" android:text=" 读 取 " />
2,sharedPreferences的代码操作
public class MainActivity extends Activity { private EditText text_v1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); text_v1=(EditText)this.findViewById(R.id.text_v1); } // 按钮的监听器方法 public void show(View view) { switch (view.getId()) { case R.id.Save:// 保存 /* * 1.创建SharedPerferences的对象 , 参数一:保存数据的文件名字 文件名如果存在 就不会创建 否则就会创建 * 参数二mode;数据的操作模式 如下: * Context.MODE_PRIVATE:为默认操作模式,代表该文件是私有数据,只能被应用本身访问 * ,在该模式下,写入的内容会覆盖原文件的内容 * Context.MODE_APPEND:模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件. * Context.MODE_WORLD_READABLE和Context * .MODE_WORLD_WRITEABLE用来控制其他应用是否有权限读写该文件. * MODE_WORLD_READABLE:表示当前文件可以被其他应用读取. * MODE_WORLD_WRITEABLE:表示当前文件可以被其他应用写入 */ SharedPreferences sharedPreferences = this.getSharedPreferences( "SharedPreferences", this.MODE_PRIVATE); // 2,获得sharedPreferences的编辑对象 Editor editer = sharedPreferences.edit(); // 3,向文件中put数据 String str = text_v1.getText().toString().trim(); //假设不为空 editer.putString("name", str); // 4.使用commit提交数据 editer.commit(); // 提示信息 Toast.makeText(this, "保存成功", Toast.LENGTH_SHORT).show(); break; case R.id.Read: // 读取刚刚保存的文件数据 // 1,得到SharedPreferences的对象 参数一 参数二相似 SharedPreferences sharedPreferencesRead = this .getSharedPreferences("SharedPreferences", this.MODE_PRIVATE); // 2,根据保存的k键读取 String name = sharedPreferencesRead.getString("name", ""); // 输出信息 text_v1.setText(name); break; case R.id.clear: text_v1.setText(""); break; } } }
二:TextWatcher监听输入框
1,布局使用上面的avtivity_main.xml布局,只使用输入框
public class TextWatcherDemo extends Activity { private EditText text; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); //获得布局文件 setContentView(R.layout.activity_main); //获取输入框 text = (EditText) this.findViewById(R.id.text_v1); text.addTextChangedListener(new TextWatcher() { //输入框监听 @Override public void onTextChanged(CharSequence s, int start, int before, int count) { //Log.i("Text", "onTextChanged:"+s+"<><>"+start+"<><> "+before+"<><>"+count); } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { //Log.i("Text", "beforeTextChanged:"+s+"<><>"+start+"<><>"+count+"<><>"+after); } @Override public void afterTextChanged(Editable s) { //Log.i("Text", "afterTextChanged:"+s); } }); } }
执行结果;
输入1 01-22 11:04:06.306: I/Text(32314): beforeTextChanged:<><>0<><>0<><>1 //改变之前的值 01-22 11:04:06.306: I/Text(32314): onTextChanged:1<><>0<><>0<><>1 //改变的值 01-22 11:04:06.308: I/Text(32314): afterTextChanged:1 //改变之后的值 输入2; 01-22 11:05:32.749: I/Text(32314): beforeTextChanged:1<><>1<><>0<><>1 01-22 11:05:32.749: I/Text(32314): onTextChanged:12<><>1<><>0<><>1 01-22 11:05:32.751: I/Text(32314): afterTextChanged:12 去掉2 01-22 11:05:59.254: I/Text(32314): beforeTextChanged:12<><>1<><>1<><>0 01-22 11:05:59.254: I/Text(32314): onTextChanged:1<><>1<><>1<><>0 01-22 11:05:59.256: I/Text(32314): afterTextChanged:1 去掉1 01-22 11:05:59.619: I/Text(32314): beforeTextChanged:1<><>0<><>1<><>0 01-22 11:05:59.619: I/Text(32314): onTextChanged:<><>0<><>1<><>0 01-22 11:05:59.621: I/Text(32314): afterTextChanged:
三;sharedPreferences和TextWatcher实现记住密码时输入用户名自动补齐密码
关键代码;
public class LoginActivity extends Activity { private String loginname; private String loginpwd; private AutoCompleteTextView username; private TextView userpwd; private CheckBox box; private SharedPreferences sf; public ArrayAdapter<String> adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.setContentView(R.layout.login_xml); // 账号和密码框 username = (AutoCompleteTextView) this.findViewById(R.id.username); userpwd = (TextView) this.findViewById(R.id.userpwd); username.setThreshold(1);// 最少输入一个字符 // 使用SharedPreferences保存账号 box = (CheckBox) this.findViewById(R.id.checkbox1); //创建存储的文件 私用的访问模式 sf = this.getSharedPreferences("user", MODE_PRIVATE); username.addTextChangedListener(new TextWatcher() { @Override public void onTextChanged(CharSequence s, int start, int before, int count) { // 获得文件中的数据 String[] allusername = sf.getAll().keySet().toArray(new String[0]); adapter = new ArrayAdapter<String>(LoginActivity.this,android.R.layout.simple_dropdown_item_1line, allusername); username.setAdapter(adapter);//设置适配器 } @Override public void beforeTextChanged(CharSequence s, int start, int count,int after) { } @Override public void afterTextChanged(Editable s) { userpwd.setText(sf.getString(username.getText().toString(), "")); } }); } // 登录的监听器 public void loginin(View v) { Handler handler = new Handler(); handler.postDelayed(new loginThread(), 1000); } // 使用线程跳转到首页 class loginThread extends Thread { public void run() { // 获取账号和密码 loginname = username.getText().toString().trim(); loginpwd = userpwd.getText().toString().trim(); System.out.println(loginname + ":账号和密码:" + loginpwd); // 账号密码是否为空 if (!loginname.equals("") && !loginpwd.equals("")) { // 判断是否选中记住密码 Boolean b = box.isChecked(); if (b) { //首选项方式保存数据 //SharedPreferences得到edit的编辑对象 Editor editor = sf.edit(); editor.putString(loginname, loginpwd); //提交数据 editor.commit(); } else { Toast.makeText(LoginActivity.this, "亲,请记住密码哦", 0).show(); } // 启动Intent传值 Intent intent = new Intent(); intent.putExtra("username", loginname); intent.putExtra("userpwd", loginpwd); setResult(RESULT_OK, intent);// 获取账号和密码并返回 finish();// 关闭Activity adapter.notifyDataSetChanged(); } else { box.setChecked(false); if (loginname.equals("")) { Toast.makeText(LoginActivity.this, "请输入账号", Toast.LENGTH_SHORT).show(); } if (loginpwd.equals("")) { Toast.makeText(LoginActivity.this, "请输入密码", Toast.LENGTH_SHORT).show(); } if (loginname.equals("") && loginpwd.equals("")) { Toast.makeText(LoginActivity.this, "请输入账号和密码", Toast.LENGTH_SHORT).show(); } } } } }