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(); } } } } }
相关推荐
在本文中,我们将探讨如何使用SharedPreferences来实现这一功能,并了解相关的Android组件和技术。 首先,SharedPreferences是Android提供的一种轻量级的数据存储方式,用于保存简单的键值对数据,如布尔值、整型、...
使用`addTextChangedListener`方法可以添加一个TextWatcher监听器,这样每次文本发生变化时,都会触发相应的回调方法。例如: ```java editText.addTextChangedListener(new TextWatcher() { @Override public...
例如,使用OnClickListener监听提交按钮的点击事件,使用TextWatcher监听输入框内容的变化。 4. 数据持久化: 评论数据需要被保存以便后续查看。可以使用SQLite数据库存储,或者借助SharedPreferences存储简单信息...
- 输入监听:使用TextWatcher监听输入框内容变化,实时验证用户名和密码的正确性。 - 密码复杂性:可以设置密码复杂性规则,如必须包含数字、大小写字母等,确保密码强度。 3. 加密与解密: - 数据加密:在存储...
这可以通过实现EditText的TextWatcher接口来完成,监听beforeTextChanged、onTextChanged和afterTextChanged方法。在onTextChanged中,我们获取当前输入的字符,然后调用之前实现的过滤器方法,查询数据库中匹配的...
- 使用TextWatcher监听输入框的变化,实时反馈验证结果,提高交互性。 3. 事件处理: - 为登录按钮设置OnClickListener,当点击按钮时触发登录操作。 - 在按钮的点击事件中,获取EditText中的文本内容,进行数据...
综上所述,创建一个支持多账户保存和自动填充的Android登录界面,需要掌握XML布局设计、SharedPreferences数据存储、加密解密技术、Autofill服务以及网络请求处理等多个知识点。这些技能对于Android应用开发是基础且...
在给定的压缩包文件中,"安卓搜索相关相关-android搜索历史记录提示在edittext输入框中输入会在本地保存下次输入会自动提示.zip",我们可以看到这个项目涉及的核心知识点是如何在EditText输入框中实现本地搜索历史...
- 使用TextWatcher监听输入框内容变化,实时进行验证和反馈。 7. **数据持久化**: - 考虑使用SharedPreferences存储用户登录状态,以便于实现自动登录功能。 - 对于敏感信息如密码,应该加密存储。 8. **网络...
- `TextWatcher`监听输入框内容变化,实时进行数据验证。 8. **错误处理**: - 显示服务器返回的错误信息,如网络异常、用户名已存在等,使用Toast或Snackbar提示用户。 - 异常处理机制,捕获并处理可能出现的...
这可以通过`TextWatcher`监听输入框变化,或者在点击登录按钮时进行一次性验证。 2. 异步处理:登录操作通常涉及网络请求,应该在后台线程(如使用`AsyncTask`或`Retrofit`)中执行,以避免阻塞UI。 3. 错误处理:...
这通常通过添加TextWatcher监听器到输入框实现,对输入内容实时校验,并在错误发生时显示相应的提示信息。 此外,考虑到应用程序的健壮性和安全性,登录注册功能还应处理一些常见情况,如网络异常、服务器错误、空...
源码可能使用`OnClickListener`处理按钮点击事件,`TextWatcher`监听输入框内容变化,以及`Adapter`处理RecyclerView的点击和滑动事件。 六、依赖注入 现代Android开发中,依赖注入框架如Dagger或Hilt广泛使用,...
这些功能可以通过TextWatcher监听EditText的文本变化,或者使用InputMethodManager控制软键盘的状态。 最后,项目的结构和模块化也是高质量代码的重要标志。一个良好的Android项目应该遵循MVP(Model-View-...
2. 事件监听:对输入框的文本变化(TextWatcher)和按钮点击事件(OnClickListener)进行监听,以便在用户输入身份证号后触发查询操作。 五、网络请求与API调用 1. Retrofit:一个流行的网络请求库,用于与服务器...
6. **监听器(Listeners)**:为了响应用户的输入并展示历史记录,需要设置TextWatcher监听器。当用户在EditText中输入文字时,TextWatcher会触发相应的回调方法,如`onTextChanged()`,在此处可以进行文本匹配和提示...
1. 输入框监听:使用EditText的TextWatcher监听用户输入,实时更新搜索结果。 2. 搜索算法:实现一个高效的搜索算法,如Trie树或哈希表,快速匹配城市名称。 七、交互设计 1. 滑动效果:CityChooseSlide可能指的是...
- 理解Activity或Fragment的生命周期,确保在正确的时间保存和恢复用户状态。 9. **单元测试**: - 对关键业务逻辑编写单元测试,确保代码的健壮性和可预测性。 10. **版本控制**: - 代码可能通过Git进行版本...
在实际开发中,根据项目需求,开发者可能需要结合其他组件或服务(如SharedPreferences存储输入数据、网络请求验证用户输入等)来实现更复杂的功能。对EditText的深入理解和灵活运用是Android开发的基础技能之一。
- 使用TextWatcher监听输入事件,实时检查用户名和密码的有效性,例如非空验证、字符长度限制等。 4. **事件处理**: - 在Java或Kotlin代码中,为登录按钮设置OnClickListener监听器,当用户点击按钮时执行登录...