实现:
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)