很多时候我们开发
软件需要向用户提供
软件参数设置功能,如
电子书软件的背景颜色设置,喜好设置等。在
Android的应用的使用SharedPreferences类来
保存
软件设置参数非常方便。
使用SharedPreferences类保存数据,其实是将这些参数保存在xml文件中,文件存放在/data/data/包名/shared_prefs目录下:
点击保存后,
将test.xml导出,打开
即为我们保存的数据。
点击读取按钮:
读取正确。
代码:
[
java]
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.Button;
import
Android.widget.EditText;
import
Android.widget.TextView;
import
Android.widget.Toast;
public class SharedPreferencesActivity extends Activity
{
private EditText nameEditText;
private EditText ageEditText;
private Button save;
private Button read;
private Button exit;
private TextView resulTextView;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
nameEditText=(EditText)findViewById(R.id.name);
ageEditText=(EditText)findViewById(R.id.age);
save=(Button)findViewById(R.id.save);
read=(Button)findViewById(R.id.read);
exit=(Button)findViewById(R.id.exit);
resulTextView=(TextView)findViewById(R.id.result);
save.setOnClickListener(listener);
read.setOnClickListener(listener);
exit.setOnClickListener(listener);
}
private OnClickListener listener=new OnClickListener()
{
@Override
public void onClick(View v)
{
Button button=(Button)v;
SharedPreferences sharedPreferences=SharedPreferencesActivity.
this.getSharedPreferences("test", Context.MODE_PRIVATE);
switch (button.getId())
{
case R.id.save:
String name=nameEditText.getText().toString();
String age=ageEditText.getText().toString();
Editor editor=sharedPreferences.edit();
editor.putString("name", name);
editor.putInt("age", Integer.parseInt(age));
editor.commit(); //内容提交
Toast.makeText(SharedPreferencesActivity.this, "保存成功",
Toast.LENGTH_SHORT).show();
break;
case R.id.read:
String namevalue= sharedPreferences.getString("name", "");//如果存在name返回name的值,如果不存在该元素,返回“”
int agevalue= sharedPreferences.getInt("age", -1);
resulTextView.setText("姓名是:"+namevalue+"n"+"年龄是:"+agevalue);
Toast.makeText(SharedPreferencesActivity.this, "读取成功",
Toast.LENGTH_SHORT).show();
break;
case R.id.exit:
Android.os.Process.killProcess(
Android.os.Process.myPid());
break;
default:
break;
}
}
};
}
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.Button;
import
Android.widget.EditText;
import
Android.widget.TextView;
import
Android.widget.Toast;
public class SharedPreferencesActivity extends Activity
{
private EditText nameEditText;
private EditText ageEditText;
private Button save;
private Button read;
private Button exit;
private TextView resulTextView;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
nameEditText=(EditText)findViewById(R.id.name);
ageEditText=(EditText)findViewById(R.id.age);
save=(Button)findViewById(R.id.save);
read=(Button)findViewById(R.id.read);
exit=(Button)findViewById(R.id.exit);
resulTextView=(TextView)findViewById(R.id.result);
save.setOnClickListener(listener);
read.setOnClickListener(listener);
exit.setOnClickListener(listener);
}
private OnClickListener listener=new OnClickListener()
{
@Override
public void onClick(View v)
{
Button button=(Button)v;
SharedPreferences sharedPreferences=SharedPreferencesActivity.
this.getSharedPreferences("test", Context.MODE_PRIVATE);
switch (button.getId())
{
case R.id.save:
String name=nameEditText.getText().toString();
String age=ageEditText.getText().toString();
Editor editor=sharedPreferences.edit();
editor.putString("name", name);
editor.putInt("age", Integer.parseInt(age));
editor.commit(); //内容提交
Toast.makeText(SharedPreferencesActivity.this, "保存成功",
Toast.LENGTH_SHORT).show();
break;
case R.id.read:
String namevalue= sharedPreferences.getString("name", "");//如果存在name返回name的值,如果不存在该元素,返回“”
int agevalue= sharedPreferences.getInt("age", -1);
resulTextView.setText("姓名是:"+namevalue+"n"+"年龄是:"+agevalue);
Toast.makeText(SharedPreferencesActivity.this, "读取成功",
Toast.LENGTH_SHORT).show();
break;
case R.id.exit:
Android.os.Process.killProcess(
Android.os.Process.myPid());
break;
default:
break;
}
}
};
}
布局文件:
www.atcpu.com[
java]
<?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"
>
<LinearLayout
Android:layout_width="match_parent"
Android:id="@+id/linearLayout1"
Android:layout_height="wrap_content">
<TextView
Android:text="姓名:"
Android:textSize="20sp"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"></TextView>
<EditText
Android:id="@+id/name"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"></EditText>
</LinearLayout>
<LinearLayout
Android:layout_width="match_parent"
Android:id="@+id/linearLayout2"
Android:layout_height="wrap_content">
<TextView
Android:text="年龄:"
Android:textSize="20sp"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"></TextView>
<EditText
Android:id="@+id/age"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"></EditText>
</LinearLayout>
<LinearLayout
Android:layout_width="match_parent"
Android:id="@+id/linearLayout3"
Android:layout_height="wrap_content">
<Button
Android:text="保存数据"
Android:id="@+id/save"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"></Button>
<Button
Android:text="读取数据"
Android:id="@+id/read"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"></Button>
<Button
Android:text="退出"
Android:id="@+id/exit"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"></Button>
</LinearLayout>
<TextView
Android:text="显示读取值"
Android:id="@+id/result"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"></TextView>
</LinearLayout>
<?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"
>
<LinearLayout
Android:layout_width="match_parent"
Android:id="@+id/linearLayout1"
Android:layout_height="wrap_content">
<TextView
Android:text="姓名:"
Android:textSize="20sp"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"></TextView>
<EditText
Android:id="@+id/name"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"></EditText>
</LinearLayout>
<LinearLayout
Android:layout_width="match_parent"
Android:id="@+id/linearLayout2"
Android:layout_height="wrap_content">
<TextView
Android:text="年龄:"
Android:textSize="20sp"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"></TextView>
<EditText
Android:id="@+id/age"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"></EditText>
</LinearLayout>
<LinearLayout
Android:layout_width="match_parent"
Android:id="@+id/linearLayout3"
Android:layout_height="wrap_content">
<Button
Android:text="保存数据"
Android:id="@+id/save"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"></Button>
<Button
Android:text="读取数据"
Android:id="@+id/read"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"></Button>
<Button
Android:text="退出"
Android:id="@+id/exit"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"></Button>
</LinearLayout>
<TextView
Android:text="显示读取值"
Android:id="@+id/result"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"></TextView>
</LinearLayout>
每次启动程序时,自动读取参数,只要做简单改动:
[
java]
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.Button;
import
Android.widget.EditText;
import
Android.widget.TextView;
import
Android.widget.Toast;
public class SharedPreferencesActivity extends Activity
{
private EditText nameEditText;
private EditText ageEditText;
private Button save;
private Button read;
private Button exit;
private TextView resulTextView;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
nameEditText=(EditText)findViewById(R.id.name);
ageEditText=(EditText)findViewById(R.id.age);
save=(Button)findViewById(R.id.save);
read=(Button)findViewById(R.id.read);
exit=(Button)findViewById(R.id.exit);
resulTextView=(TextView)findViewById(R.id.result);
save.setOnClickListener(listener);
read.setOnClickListener(listener);
exit.setOnClickListener(listener);
SharedPreferences sharedPreferences=SharedPreferencesActivity.
this.getSharedPreferences("test", Context.MODE_PRIVATE);
String namevalue= sharedPreferences.getString("name", "");
int agevalue= sharedPreferences.getInt("age", -1);
nameEditText.setText(namevalue);
ageEditText.setText(String.valueOf(agevalue));
}
private OnClickListener listener=new OnClickListener()
{
@Override
public void onClick(View v)
{
Button button=(Button)v;
SharedPreferences sharedPreferences=SharedPreferencesActivity.
this.getSharedPreferences("test", Context.MODE_PRIVATE);
switch (button.getId())
{
case R.id.save:
String name=nameEditText.getText().toString();
String age=ageEditText.getText().toString();
Editor editor=sharedPreferences.edit();
editor.putString("name", name);
editor.putInt("age", Integer.parseInt(age));
editor.commit(); //内容提交
Toast.makeText(SharedPreferencesActivity.this, "保存成功",
Toast.LENGTH_SHORT).show();
break;
case R.id.read:
String namevalue= sharedPreferences.getString("name", "");
int agevalue= sharedPreferences.getInt("age", -1);
resulTextView.setText("姓名是:"+namevalue+"n"+"年龄是:"+agevalue);
Toast.makeText(SharedPreferencesActivity.this, "读取成功",
Toast.LENGTH_SHORT).show();
break;
case R.id.exit:
Android.os.Process.killProcess(
Android.os.Process.myPid());
break;
default:
break;
}
}
};
}
若想保存的xml文件被其他文件访问,应修改:
SharedPreferences sharedPreferences=SharedPreferencesActivity.
this.getSharedPreferences("test", Context.MODE_WORLD_READABLE+Context.MODE_WORLD_WRITEABLE);
可以看到其读写权限发生变化
测试的其他Activity
[
java]
import
Android.app.Activity;
import
Android.content.Context;
import
Android.content.SharedPreferences;
import
Android.content.pm.PackageManager.NameNotFoundException;
import
Android.os.Bundle;
import
Android.util.Log;
public class LogActivity extends Activity
{
private static final String TAG="LogActivity";
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//Log.i(TAG, "TAG打印测试");
try
{
Context context=this.createPackageContext("com.luku.SharedPreferences",
Context.CONTEXT_IGNORE_SECURITY);
SharedPreferences sharedPreferences=context.getSharedPreferences
("test", Context.MODE_WORLD_READABLE+Context.MODE_WORLD_WRITEABLE);
String namevalue= sharedPreferences.getString("name", "");
int agevalue= sharedPreferences.getInt("age", -1);
Log.i(TAG, "名字是:"+namevalue+","+"年龄为:"+agevalue);
} catch (NameNotFoundException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
import
Android.app.Activity;
import
Android.content.Context;
import
Android.content.SharedPreferences;
import
Android.content.pm.PackageManager.NameNotFoundException;
import
Android.os.Bundle;
import
Android.util.Log;
public class LogActivity extends Activity
{
private static final String TAG="LogActivity";
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//Log.i(TAG, "TAG打印测试");
try
{
Context context=this.createPackageContext("com.luku.SharedPreferences",
Context.CONTEXT_IGNORE_SECURITY);
SharedPreferences sharedPreferences=context.getSharedPreferences
("test", Context.MODE_WORLD_READABLE+Context.MODE_WORLD_WRITEABLE);
String namevalue= sharedPreferences.getString("name", "");
int agevalue= sharedPreferences.getInt("age", -1);
Log.i(TAG, "名字是:"+namevalue+","+"年龄为:"+agevalue);
} catch (NameNotFoundException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
由其他程序访问成功!