andoird 系统之SharedPreferences(配置文件)操作

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

}



原文地址:https://www.cnblogs.com/java20130726/p/3218359.html