sharedPreferences保存数据和TextWatcher监听输入框的技术介绍
16lz
2021-01-25
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();}}}}}
更多相关文章
- 一款常用的 Squid 日志分析工具
- GitHub 标星 8K+!一款开源替代 ls 的工具你值得拥有!
- “罗永浩抖音首秀”销售数据的可视化大屏是怎么做出来的呢?
- Nginx系列教程(三)| 一文带你读懂Nginx的负载均衡
- RHEL 6 下 DHCP+TFTP+FTP+PXE+Kickstart 实现无人值守安装
- Linux 环境下实战 Rsync 备份工具及配置 rsync+inotify 实时同步
- 不吹不黑!GitHub 上帮助人们学习编码的 12 个资源,错过血亏...
- listView单选实现(一)
- Android(安卓)创建快捷方式