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

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值