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