在windows 系统下,我们的配置文件通常使用ini 做为配置文件。如my.sql 数据库有my.ini ,我们通常要修改my.ini 的里的字符集编码。
而JAVA工程我们通常使用properties 文件编写配置文件,这样做的目的是对容易变更的文件好修改,不需要重新编译。
android 项目(系统)同要提供了这样的功能,SharedPreferences 用来给系统填加配置。
实现代码如下:
// 给系统添加配置文件
SharedPreferences sharedPreferences = getSharedPreferences("soliu", Context.MODE_PRIVATE);
// 编辑配置
Editor editor = sharedPreferences.edit();//获取编辑器
editor.putString("name", "my name is mr 刘");
editor.putInt("age", 24);
editor.commit();//提交修改
//获取配置内容
String name = sharedPreferences.getString("name","");
Integer age = sharedPreferences.getInt("age", 1);
Log.i("name", name);
Log.i("age",age.toString());
注:sharedPreferences.getKey(); 通过key获取value,如果没有取到值也不会抛异常,会返回后边的默认值
最终参数结果
<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
<string name="name">my name is mr 刘</string>
<int name="age" value="24" />
</map>
方法: getSharedPreferences("soliu", Context.MODE_PRIVATE);
第一个参数是是配置文件的名称,第二个参数是创建方式,默认在私有目录下。在\data\data\<package.name>\shared_prefs\soliu.xml
sharePreferences.getString("name","defaultValue")
第一个参数是是配置文件的key,第二个参数是默认值。
第二个常用参数。
Context.MODE_PRIVATE .指它该sharedPreferences 只能被本应用程一刹那读、写。
Context.MODE_WORLD_READABLE.指它该sharedPreferences 可以被其他应用程一刹那读。
Context.MODE_WORLD_WRITEABLE.指它该sharedPreferences 可以被其他应用程一刹那读、写。
图:
如果其他应程序想获取这本程序的sharedPreferences的值。
需要按又下须序操作
第一步:需要创建其他程序对应的Context.代码如下。
Context context = CreatePackageContext("com.hkrt.action",Context.CONTEXT_IGNORE_SECURITY);
Sharedferences sf= context.getSharedPreferences("name",Context.MODE_WORLD_READABLE);
String name = sf.getString("name",default);
具体在项目中的应用:
现在项目中有这个的需求,让用户登陆可以进记用户名和密码,就是当用户点击记录密码登陆时,下次有户再进来此项目就不需要再输入用户名和密码,
下面我们来处理登陆记录密码。我们使用 sharedPreferences 来保存用户名和密码,(当然,密码可以进行加密这里就不处理了)。
具体实现如下:
package com.hkrt.activity;
import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.Toast;
import com.hkrt.R;
public class LoginUserActivity extends Activity {
private EditText userNameEdit,PasswrodEdit;
private CheckBox checkPwd;
private ImageButton login;
private SharedPreferences sharedPreferences ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.login_user_activity);
userNameEdit = (EditText)this.findViewById(R.id.username_edit);
PasswrodEdit = (EditText)this.findViewById(R.id.password_edit);
checkPwd = (CheckBox)this.findViewById(R.id.checkPwd);
login = (ImageButton)this.findViewById(R.id.login);
sharedPreferences= getSharedPreferences("login", Context.MODE_PRIVATE);
final Editor editor = sharedPreferences.edit();//获取编辑器
login.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if(checkPwd.isChecked()){
// 编辑配置
editor.putString("name",userNameEdit.getText().toString());
editor.putString("pwd", PasswrodEdit.getText().toString());
editor.commit();//提交修改
}else{
editor.putString("name",null);
editor.putString("pwd", null);
editor.commit();//提交修改
}
Toast.makeText(LoginUserActivity.this, "登陆成功", 0).show();
}
});
String userName = sharedPreferences.getString("name","");
String pwd = sharedPreferences.getString("pwd","");
userNameEdit.setText(userName);
PasswrodEdit.setText(pwd);
if(userName!=null && !userName.equals("")){
checkPwd.setChecked(true);
}
}
}