`
百合不是茶
  • 浏览: 356025 次
社区版块
存档分类
最新评论

sharedPreferences保存数据和TextWatcher监听输入框的技术介绍

阅读更多

 

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();
				}
			}
		}
	}
}

 

 

 

 

  • 大小: 44.1 KB
0
1
分享到:
评论

相关推荐

    Android实现带有记住密码功能的登陆界面

    在本文中,我们将探讨如何使用SharedPreferences来实现这一功能,并了解相关的Android组件和技术。 首先,SharedPreferences是Android提供的一种轻量级的数据存储方式,用于保存简单的键值对数据,如布尔值、整型、...

    -android搜索历史记录提示,在edittext输入框中输入,会在本地保存,下次输入会自动提示.rar

    使用`addTextChangedListener`方法可以添加一个TextWatcher监听器,这样每次文本发生变化时,都会触发相应的回调方法。例如: ```java editText.addTextChangedListener(new TextWatcher() { @Override public...

    仿朋友圈或QQ空间的评论

    例如,使用OnClickListener监听提交按钮的点击事件,使用TextWatcher监听输入框内容的变化。 4. 数据持久化: 评论数据需要被保存以便后续查看。可以使用SQLite数据库存储,或者借助SharedPreferences存储简单信息...

    安卓Android源码——带密码登陆的密码保险箱.zip

    - 输入监听:使用TextWatcher监听输入框内容变化,实时验证用户名和密码的正确性。 - 密码复杂性:可以设置密码复杂性规则,如必须包含数字、大小写字母等,确保密码强度。 3. 加密与解密: - 数据加密:在存储...

    android搜索历史记录提示,在edittext输入框中输入,会在本地保存,下次输入会自动提示.zip

    这可以通过实现EditText的TextWatcher接口来完成,监听beforeTextChanged、onTextChanged和afterTextChanged方法。在onTextChanged中,我们获取当前输入的字符,然后调用之前实现的过滤器方法,查询数据库中匹配的...

    android登录实现

    - 使用TextWatcher监听输入框的变化,实时反馈验证结果,提高交互性。 3. 事件处理: - 为登录按钮设置OnClickListener,当点击按钮时触发登录操作。 - 在按钮的点击事件中,获取EditText中的文本内容,进行数据...

    android 登陆界面

    综上所述,创建一个支持多账户保存和自动填充的Android登录界面,需要掌握XML布局设计、SharedPreferences数据存储、加密解密技术、Autofill服务以及网络请求处理等多个知识点。这些技能对于Android应用开发是基础且...

    安卓搜索相关相关-android搜索历史记录提示在edittext输入框中输入会在本地保存下次输入会自动提示.zip

    在给定的压缩包文件中,"安卓搜索相关相关-android搜索历史记录提示在edittext输入框中输入会在本地保存下次输入会自动提示.zip",我们可以看到这个项目涉及的核心知识点是如何在EditText输入框中实现本地搜索历史...

    Android应用源码完美登录界面设计,附加登录下拉效果.zip

    - 使用TextWatcher监听输入框内容变化,实时进行验证和反馈。 7. **数据持久化**: - 考虑使用SharedPreferences存储用户登录状态,以便于实现自动登录功能。 - 对于敏感信息如密码,应该加密存储。 8. **网络...

    Android安卓源码-登录注册类源代码(9例).zip

    - `TextWatcher`监听输入框内容变化,实时进行数据验证。 8. **错误处理**: - 显示服务器返回的错误信息,如网络异常、用户名已存在等,使用Toast或Snackbar提示用户。 - 异常处理机制,捕获并处理可能出现的...

    android用户登陆界面

    这可以通过`TextWatcher`监听输入框变化,或者在点击登录按钮时进行一次性验证。 2. 异步处理:登录操作通常涉及网络请求,应该在后台线程(如使用`AsyncTask`或`Retrofit`)中执行,以避免阻塞UI。 3. 错误处理:...

    Android开发课堂作业记单词APP登录注册页面跳转

    这通常通过添加TextWatcher监听器到输入框实现,对输入内容实时校验,并在错误发生时显示相应的提示信息。 此外,考虑到应用程序的健壮性和安全性,登录注册功能还应处理一些常见情况,如网络异常、服务器错误、空...

    Android参考源码-个人消费记录软件.zip

    源码可能使用`OnClickListener`处理按钮点击事件,`TextWatcher`监听输入框内容变化,以及`Adapter`处理RecyclerView的点击和滑动事件。 六、依赖注入 现代Android开发中,依赖注入框架如Dagger或Hilt广泛使用,...

    安卓Android源码——仿QQ微信登录页面.zip

    这些功能可以通过TextWatcher监听EditText的文本变化,或者使用InputMethodManager控制软键盘的状态。 最后,项目的结构和模块化也是高质量代码的重要标志。一个良好的Android项目应该遵循MVP(Model-View-...

    Android 查询软件源代码(身份证号,号码归属等)-IT计算机-毕业设计.zip

    2. 事件监听:对输入框的文本变化(TextWatcher)和按钮点击事件(OnClickListener)进行监听,以便在用户输入身份证号后触发查询操作。 五、网络请求与API调用 1. Retrofit:一个流行的网络请求库,用于与服务器...

    android搜索历史记录提示

    6. **监听器(Listeners)**:为了响应用户的输入并展示历史记录,需要设置TextWatcher监听器。当用户在EditText中输入文字时,TextWatcher会触发相应的回调方法,如`onTextChanged()`,在此处可以进行文本匹配和提示...

    android城市列表选择百度定位

    1. 输入框监听:使用EditText的TextWatcher监听用户输入,实时更新搜索结果。 2. 搜索算法:实现一个高效的搜索算法,如Trie树或哈希表,快速匹配城市名称。 七、交互设计 1. 滑动效果:CityChooseSlide可能指的是...

    安卓Android源码——高仿乐动力体重设置.zip

    - 理解Activity或Fragment的生命周期,确保在正确的时间保存和恢复用户状态。 9. **单元测试**: - 对关键业务逻辑编写单元测试,确保代码的健壮性和可预测性。 10. **版本控制**: - 代码可能通过Git进行版本...

    EditText输入框

    在实际开发中,根据项目需求,开发者可能需要结合其他组件或服务(如SharedPreferences存储输入数据、网络请求验证用户输入等)来实现更复杂的功能。对EditText的深入理解和灵活运用是Android开发的基础技能之一。

    tablelogin(登陆界面).zip

    - 使用TextWatcher监听输入事件,实时检查用户名和密码的有效性,例如非空验证、字符长度限制等。 4. **事件处理**: - 在Java或Kotlin代码中,为登录按钮设置OnClickListener监听器,当用户点击按钮时执行登录...

Global site tag (gtag.js) - Google Analytics