源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

android中使用SharedPreferences进行数据存储的操作方法

  • 时间:2021-07-12 08:05 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:android中使用SharedPreferences进行数据存储的操作方法
很多时候我们开发的软件需要向用户提供软件参数设置功能,例如我们常用的QQ,用户可以设置是否允许陌生人添加自己为好友。对于软件配置参数的保存,如果是window软件通常我们会采用ini文件进行保存,如果是 j2se应用,我们会采用properties属性文件或者xml进行保存。如果是Android应用,我们最适合采用什么方式保存软件配置参数呢?Android 平台给我们提供了一个SharedPreferences类,它是一个轻量级的存储类,特别适合用于保存软件配置参数。使用 SharedPreferences保存数据,其背后是用xml文件存放数据,文件存放在/data/data/<package name>/shared_prefs目录下: SharedPreferences sharedPreferences = getSharedPreferences("ljq", Context.MODE_PRIVATE); Editor editor = sharedPreferences.edit();//获取编辑器 editor.putString("name", "林计钦"); editor.putInt("age", 24); editor.commit();//提交修改                   生成的ljq.xml文件内容如下: <?xml version='1.0' encoding='utf-8' standalone='yes' ?> <map>    <string name="name">林计钦</string>    <int name="age" value="24" /> </map> 因为SharedPreferences背后是使用xml文件保存数据,getSharedPreferences(name,mode)方法的第一个参数用于指定该文件的名称,名称不用带后缀,后缀会由Android自动加上。方法的第二个参数指定文件的操作模式,共有四种操作模式,这四种模式前面介绍使用文件方式保存数据时已经讲解过。如果希望SharedPreferences背后使用的xml文件能被其他应用读和写,可以指定Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE权限。 另外Activity还提供了另一个getPreferences(mode)方法操作SharedPreferences,这个方法默认使用当前类不带包名的类名作为文件的名称。                                 [b]访问SharedPreferences中的数据[/b] 访问SharedPreferences中的数据代码如下: SharedPreferences sharedPreferences = getSharedPreferences("ljq", Context.MODE_PRIVATE); //getString()第二个参数为缺省值,如果preference中不存在该key,将返回缺省值 String name = sharedPreferences.getString("name", ""); int age = sharedPreferences.getInt("age", 1); 如果访问其他应用中的Preference,前提条件是:该preference创建时指定了Context.MODE_WORLD_READABLE或者Context.MODE_WORLD_WRITEABLE权限。 如:有个<package name>为com.ljq.action的应用使用下面语句创建了preference。 getSharedPreferences("ljq", Context.MODE_WORLD_READABLE); 其他应用要访问上面应用的preference,首先需要创建上面应用的Context,然后通过Context 访问preference ,访问preference时会在应用所在包下的shared_prefs目录找到preference : Context otherAppsContext = createPackageContext("com.ljq.action", Context.CONTEXT_IGNORE_SECURITY); SharedPreferences sharedPreferences = otherAppsContext.getSharedPreferences("ljq", Context.MODE_WORLD_READABLE); String name = sharedPreferences.getString("name", ""); int age = sharedPreferences.getInt("age", 0); 如果不通过创建Context访问其他应用的preference,也可以以读取xml文件方式直接访问其他应用preference对应的xml文件,如: File xmlFile = new File("/data/data/<package name>/shared_prefs/itcast.xml");//<package name>应替换成应用的包名                       [b]案例:[/b] [b]string.xml文件 [/b]
[u]复制代码[/u] 代码如下:
<?xml version="1.0" encoding="utf-8"?> <resources>     <string name="hello">Hello World, SpActivity!</string>     <string name="app_name">软件配置参数</string>     <string name="name">姓名</string>     <string name="age">年龄</string>     <string name="button">保存设置</string>     <string name="showButton">显示</string> </resources>
main.xml布局文件
[u]复制代码[/u] 代码如下:
<?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">     <RelativeLayout         xmlns:android="http://schemas.android.com/apk/res/android"         android:layout_width="wrap_content"         android:layout_height="wrap_content">         <TextView android:layout_width="wrap_content"             android:layout_height="wrap_content"             android:text="@string/name"             android:textSize="20px"             android:id="@+id/nameLable" />         <EditText android:layout_width="80px"             android:layout_height="wrap_content"             android:layout_toRightOf="@id/nameLable"             android:layout_alignTop="@id/nameLable"             android:layout_marginLeft="10px"             android:id="@+id/name" />     </RelativeLayout>     <RelativeLayout         xmlns:android="http://schemas.android.com/apk/res/android"         android:layout_width="wrap_content"         android:layout_height="wrap_content">         <TextView android:layout_width="wrap_content"             android:layout_height="wrap_content"             android:textSize="20px"             android:text="@string/age"             android:id="@+id/ageLable" />         <EditText android:layout_width="80px"             android:layout_height="wrap_content"             android:layout_toRightOf="@id/ageLable"             android:layout_alignTop="@id/ageLable"             android:layout_marginLeft="10px"             android:id="@+id/age" />     </RelativeLayout>     <RelativeLayout         xmlns:android="http://schemas.android.com/apk/res/android"         android:layout_width="wrap_content"         android:layout_height="wrap_content">         <Button android:layout_width="wrap_content"             android:layout_height="wrap_content"             android:text="@string/button"             android:id="@+id/button" />         <Button android:layout_width="wrap_content"             android:layout_height="wrap_content"             android:text="@string/showButton"             android:layout_toRightOf="@id/button"             android:layout_alignTop="@id/button"             android:id="@+id/showButton" />     </RelativeLayout>     <TextView android:layout_width="fill_parent"             android:layout_height="wrap_content"             android:textSize="20px"             android:id="@+id/showText" /> </LinearLayout>
[u]复制代码[/u] 代码如下:
package com.ljq.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.widget.Button; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; public class SpActivity extends Activity {     private EditText nameText;     private EditText ageText;     private TextView resultText;     @Override     public void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.main);         nameText = (EditText)this.findViewById(R.id.name);         ageText = (EditText)this.findViewById(R.id.age);         resultText = (TextView)this.findViewById(R.id.showText);         Button button = (Button)this.findViewById(R.id.button);         Button showButton = (Button)this.findViewById(R.id.showButton);         button.setOnClickListener(listener);         showButton.setOnClickListener(listener);         // 回显         SharedPreferences sharedPreferences=getSharedPreferences("ljq123",                 Context.MODE_WORLD_READABLE+Context.MODE_WORLD_WRITEABLE);         String nameValue = sharedPreferences.getString("name", "");         int ageValue = sharedPreferences.getInt("age", 1);         nameText.setText(nameValue);         ageText.setText(String.valueOf(ageValue));     }     private View.OnClickListener listener = new View.OnClickListener(){         public void onClick(View v) {             Button button = (Button)v;             //ljq123文件存放在/data/data/<package name>/shared_prefs目录下             SharedPreferences sharedPreferences=getSharedPreferences("ljq123",                     Context.MODE_WORLD_READABLE+Context.MODE_WORLD_WRITEABLE);             switch (button.getId()) {             case R.id.button:                 String name = nameText.getText().toString();                 int age = Integer.parseInt(ageText.getText().toString());                 Editor editor = sharedPreferences.edit(); //获取编辑器                 editor.putString("name", name);                 editor.putInt("age", age);                 editor.commit();//提交修改                 Toast.makeText(SpActivity.this, "保存成功", Toast.LENGTH_LONG).show();                 break;             case R.id.showButton:                 String nameValue = sharedPreferences.getString("name", "");                 int ageValue = sharedPreferences.getInt("age", 1);                 resultText.setText("姓名:" + nameValue + ",年龄:" + ageValue);                 break;             }         }     }; }
运行结果 [img]http://files.jb51.net/file_images/article/201304/201304271241112.png[/img] 如何访问其他应用中的Preference?
[u]复制代码[/u] 代码如下:
package com.ljq.sp; import java.io.File; import java.io.FileInputStream; import android.content.Context; import android.content.SharedPreferences; import android.test.AndroidTestCase; import android.util.Log; public class AccessSharePreferenceTest extends AndroidTestCase{     private static final String TAG = "AccessSharePreferenceTest";     /**      * 访问SharePreference的方式一,注:权限要足够      * @throws Exception      */     public void testAccessPreference() throws Exception{         String path = "/data/data/com.ljq.activity/shared_prefs/ljq123.xml";         File file = new File(path);         FileInputStream inputStream = new FileInputStream(file);         //获取的是一个xml字符串         String data = new FileService().read(inputStream);         Log.i(TAG, data);     }     /**      * 访问SharePreference的方式二,注:权限要足够      * @throws Exception      */     public void testAccessPreference2() throws Exception{         Context context = this.getContext().createPackageContext("com.ljq.activity",                 Context.CONTEXT_IGNORE_SECURITY);         SharedPreferences sharedPreferences = context.getSharedPreferences("ljq123",                 Context.MODE_WORLD_READABLE+Context.MODE_WORLD_WRITEABLE);         String name = sharedPreferences.getString("name", "");         int age = sharedPreferences.getInt("age", 1);         Log.i(TAG, name + " : " +age);     } }
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部