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;@Overrideprotected 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;@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.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);}@Overridepublic void beforeTextChanged(CharSequence s, int start, int count,int after) {//Log.i("Text", "beforeTextChanged:"+s+"<><>"+start+"<><>"+count+"<><>"+after);}@Overridepublic void afterTextChanged(Editable s) {//Log.i("Text", "afterTextChanged:"+s);}});}}

执行结果;

输入101-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<><>101-22 11:05:32.749: I/Text(32314): onTextChanged:12<><>1<><>0<><>101-22 11:05:32.751: I/Text(32314): afterTextChanged:12去掉201-22 11:05:59.254: I/Text(32314): beforeTextChanged:12<><>1<><>1<><>001-22 11:05:59.254: I/Text(32314): onTextChanged:1<><>1<><>1<><>001-22 11:05:59.256: I/Text(32314): afterTextChanged:1去掉101-22 11:05:59.619: I/Text(32314): beforeTextChanged:1<><>0<><>1<><>001-22 11:05:59.619: I/Text(32314): onTextChanged:<><>0<><>1<><>001-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;@Overrideprotected 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() {@Overridepublic 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);//设置适配器}@Overridepublic void beforeTextChanged(CharSequence s, int start, int count,int after) {}@Overridepublic 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();// 关闭Activityadapter.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();}}}}}

更多相关文章

  1. 一款常用的 Squid 日志分析工具
  2. GitHub 标星 8K+!一款开源替代 ls 的工具你值得拥有!
  3. “罗永浩抖音首秀”销售数据的可视化大屏是怎么做出来的呢?
  4. Nginx系列教程(三)| 一文带你读懂Nginx的负载均衡
  5. RHEL 6 下 DHCP+TFTP+FTP+PXE+Kickstart 实现无人值守安装
  6. Linux 环境下实战 Rsync 备份工具及配置 rsync+inotify 实时同步
  7. 不吹不黑!GitHub 上帮助人们学习编码的 12 个资源,错过血亏...
  8. listView单选实现(一)
  9. Android(安卓)创建快捷方式

随机推荐

  1. Recovery模式的命令行参数
  2. android 调用系统命令实现关机
  3. LeakCanary使用详解
  4. Android调用第三方百度APP进行导航
  5. Android-EditText属性大全
  6. Android使用Recycler View实现瀑布流效果
  7. Android中测量文字的宽度和高度
  8. Android(安卓)Studio 常用控件和常用布局
  9. Android框架排行榜,上百项资源汇总不容错
  10. Android(安卓)自定义SurfaceView详解