读写SharedPreferences/PreferenceActivity中的数据

原创作品,允许转载,转载时请务必以超链接形式标明文章  原始出处  、作者信息和本声明。否则将追究法律责任。 http://blog.csdn.net/love254443233/article/details/7615546

实现:

SharedPreference读写PreferenceActivity中的配置数据;

(在XML文件中定义button按键点击监听方法myButtonClick,在MainActivity中实现该方法:public void myButtonClick(View view))

SharedPreference:

是一种轻量级的数据存取方法,主要存储数据比较少的配置信息。它以“key-value”对的方式将数据保存在XML文件中。 
存取数据方法:使用来自于andorid.content包接口 
取数据使用:SharedPreferences接口
存数据使用:SharedPreferences.Editor接口
Context.getSharedPreferences(String name,int mode)方法得到SharedPreferences接口。
该方法的第一个参数是文件名称,第二个参数是操作模式。

第一个参数命名:

一般为“包名_配置文件名”如“cn.edu.xtu_preferences”(包名:cn.edu.xtu、配置文件:preferences.xml)

操作模式有三种:
MODE_PRIVATE(私有) 
MODE_WORLD_READABLE(可读) 
MODE_WORLD_WRITEABLE(可写)
int MODE= MODE_WORLD_READABLE+ MODE_WORLD_WRITEABLE


一些方法:

SharedPreferences.Editor editor;//全局变量,用来写
SharedPreferences perfer;//全局变量,用来读
int mode=MODE_WORLD_READABLE+MODE_WORLD_WRITEABLE;//这个是可以在不同应用程序之间可读和可写

perfer=getSharedPreferences("preferences",mode);//第一个参数为创建一个文件名为preferences,

具体目录为/data/data/name>/shared_prefs 目录下(SharedPreferences数据总是保存在/data/data/<package-name>/shared_prefs目录),第二个参数是读写模式(这里是可以在不通应用程序之间可读可写)

editor=perfer.edit();//创建可编辑对象
editor.putString("name", "hello java");//写入键值对,类似MAP
editor.commit();//提交修改

String data = perfer.getString("name", null);//读要显示的内容
在不同的Activity下,读内容的方法
SharedPreferences sharedata = getSharedPreferences("syj", 0);

String data = sharedata.getString("name", null);

测试代码:

一、主类

package cn.edu.xtu;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends Activity {
	boolean a,b,c,d;
	String eString,fString;
	Button setButton,showButton;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
         setButton=(Button)findViewById(R.id.set);        
         showButton=(Button)findViewById(R.id.show);
        getGameData();        
    }
    public void myButtonClick(View view){
    	System.out.println(view.getId());
    	if(view==(Button)findViewById(R.id.set)){
	    	Intent intent=new Intent();
	    	intent.setClass(MainActivity.this, GameSetActivity.class);
	    	MainActivity.this.startActivity(intent);
    	}
    	if(view==(Button)findViewById(R.id.show)){
    		getGameData();
    		Toast toast=Toast.makeText(MainActivity.this,
                    "是否反向:"+(a?"是":"否")+
                    "  趣味:"+(b?"是":"否")+
                    "  标记:"+(c?"是":"否")+
                    "  传感器:"+(d?"是":"否")+
                    "  难易程序:"+eString+
                    "  行列数:"+fString, 5000);
    		toast.show();
    	}
    }
    public String[] getGameData(){
    	System.out.println("下面开始初始化游戏参数数组");
    
		SharedPreferences prefs =getSharedPreferences("cn.edu.xtu_preferences",Context.MODE_WORLD_READABLE) ;
		
		System.out.println(new Boolean(a=prefs.getBoolean("reversed",false)).toString());//false表示没有查到checkbox这个key的返回值
		System.out.println(new Boolean(b=prefs.getBoolean("funny",false)).toString());
		System.out.println(new Boolean(c=prefs.getBoolean("addString",false)).toString());
		System.out.println(new Boolean(d=prefs.getBoolean("apply_senso",false)).toString());
		
		System.out.println(eString=prefs.getString("hard_easy","列表没有值"));//<unset>表示没有查到ringtong这个key的返回值
		System.out.println(fString=prefs.getString("row_column", "列表没有值"));
		
    	return null;
    }
}
二、配置文件类

package cn.edu.xtu;


import android.content.SharedPreferences;
import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
import android.os.Bundle;
import android.preference.CheckBoxPreference;
import android.preference.ListPreference;
import android.preference.Preference;
import android.preference.PreferenceActivity;
import android.preference.PreferenceManager;
import android.preference.PreferenceScreen;
import android.util.Log;

public class GameSetActivity extends PreferenceActivity	implements  
	Preference.OnPreferenceClickListener,  
	Preference.OnPreferenceChangeListener, OnSharedPreferenceChangeListener {   	
	
	private CheckBoxPreference reversed, funny, addString, apply_sensor;
	private ListPreference row_column, hard_easy;
	   
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);		
		addPreferencesFromResource(R.xml.preferences);		
		init();
    }
    private void init(){
    	reversed=(CheckBoxPreference)findPreference("reversed");
    	funny=(CheckBoxPreference)findPreference("funny");
    	addString=(CheckBoxPreference)findPreference("addString");
    	apply_sensor=(CheckBoxPreference)findPreference("apply_sensor");

    	hard_easy=(ListPreference)findPreference("hard_easy");
    	row_column=(ListPreference)findPreference("row_column");    	
    	
    	reversed.setOnPreferenceClickListener(this);  
    	reversed.setOnPreferenceChangeListener(this);  
         
    	funny.setOnPreferenceClickListener(this);  
    	funny.setOnPreferenceChangeListener(this);  
        
    	addString.setOnPreferenceClickListener(this);  
    	addString.setOnPreferenceChangeListener(this); 
         
    	apply_sensor.setOnPreferenceClickListener(this);  
    	apply_sensor.setOnPreferenceChangeListener(this);  
         
    	row_column.setOnPreferenceClickListener(this);  
    	row_column.setOnPreferenceChangeListener(this);  
         
    	hard_easy.setOnPreferenceClickListener(this);  
    	hard_easy.setOnPreferenceChangeListener(this); 
    }
        
    
 // 对控件进行的一些操作  
    private void operatePreference(Preference preference) {  
       
    }  
 // 点击事件触发  
    @Override  
    public boolean onPreferenceClick(Preference preference) {  
        // TODO Auto-generated method stub  
        Log.d("GameSet", "onPreferenceClick----->"+String.valueOf(preference.getKey()));          
        return false;  
    }
    
  //点击事件触发  
    @Override
    public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen,  
            Preference preference) {  
        return false;  
    }  
 // 当Preference的值发生改变时触发该事件,true则以新值更新控件的状态,false则do noting  
	@Override
	public boolean onPreferenceChange(Preference preference, Object newValue) {
		Log.d("GameSet", "onPreferenceChange----->"+String.valueOf(preference.getKey()));
		Log.d("GameSet", "onPreferenceChange.newValue----->"+String.valueOf(newValue));        
        return true;  //保存更新后的值  
	}
	@Override
	public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
			String key) {
		// TODO Auto-generated method stub
		
	} 
    
}     

三、preferences.xml代码

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen
  xmlns:android="http://schemas.android.com/apk/res/android">
  <PreferenceCategory android:title="基本设置">
    <CheckBoxPreference
      android:key="reversed"
      android:title="反向"
      android:summary="是否反向?"
      android:defaultValue="false"
      android:persistent="true"
    />    
        <CheckBoxPreference
      android:key="funny"
      android:title="趣味洗牌"
      android:summary="趣味洗牌也别有一番味道"
      android:defaultValue="false"
      android:persistent="true"
    />
        <CheckBoxPreference
      android:key="addString"
      android:title="标记行/列"
      android:summary="显示方格原来的位置"
      android:defaultValue="true"
      android:persistent="true"
    />        
  </PreferenceCategory>
  <PreferenceCategory android:title="高级设置">
    <ListPreference
      android:key="hard_easy"
      android:title="难易程序"
      android:summary="选择游戏的难易程序"
      android:entries="@array/hard_easy"
      android:entryValues="@array/hard_easy_codes"
      android:dialogTitle="选择一个游戏等级" 
      android:persistent="true"/>
      
      <ListPreference
      android:key="row_column"
      android:title="行、列数设置"
      android:summary="选择游戏的行、列数"
      android:entries="@array/row_column"
      android:entryValues="@array/row_column_codes"
      android:dialogTitle="选择一个游戏等级" 
      android:persistent="true"/>
  </PreferenceCategory>
  <PreferenceCategory android:title="传感器设置">
	   <CheckBoxPreference   
	     android:key="apply_sensor"  
	     android:title="启动传感器"    
	     android:summary="开启传感器后可以摇动手机来控制游戏"
	     android:persistent="true">  
	  </CheckBoxPreference>  
	  <PreferenceScreen
	     android:key="sensor_setting"  
	     android:title="传感器灵敏度设置"    
	     android:summary="设置和管理无传感器灵敏度"   
	     android:dependency="apply_sensor">  
	     <CheckBoxPreference
	        android:key="checkbox2"
	        android:title="Another Checkbox"
	        android:summary="On. Off. It really doesn't matter."
      	/>
	  </PreferenceScreen>  
  </PreferenceCategory>
</PreferenceScreen>
四:main .xml代码

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
	<Button
		android:layout_width="fill_parent"
		android:layout_height="wrap_content"
		android:text="配置游戏参数"
		android:id="@+id/set"
		android:onClick="myButtonClick"
	/>
	
	<Button
		android:layout_width="fill_parent"
		android:layout_height="wrap_content"
		android:text="显示参数"
		android:id="@+id/show"
		android:onClick="myButtonClick"
	/>
</LinearLayout>

五、程序运行如图


配置游戏参数如图


六、测试数据:

程序开始运行,点击“显示参数”按钮时输出:

05-30 11:17:35.390: INFO/System.out(14145): false
05-30 11:17:35.390: INFO/System.out(14145): false
05-30 11:17:35.390: INFO/System.out(14145): true
05-30 11:17:35.390: INFO/System.out(14145): false
05-30 11:17:35.390: INFO/System.out(14145): 列表没有值
05-30 11:17:35.390: INFO/System.out(14145): 列表没有值

进入“配置游戏参数”后点击“显示参数”按钮时输出

05-30 11:17:53.820: INFO/System.out(14145): false
05-30 11:17:53.820: INFO/System.out(14145): false
05-30 11:17:53.820: INFO/System.out(14145): true
05-30 11:17:53.820: INFO/System.out(14145): false
05-30 11:17:53.820: INFO/System.out(14145): EASY
05-30 11:17:53.820: INFO/System.out(14145): 4x3

完整代码免费下载:http://download.csdn.net/detail/love254443233/4339461

(转载请注明出处:http://my.csdn.net/love254443233)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值