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