当前位置: 首页>编程语言>正文

SharedPreferences ListPreference 存编号 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>

getSharedPreferences(name,mode)方法的第一个参数用于指定该文件的名称,名称不用带后缀,后缀会由Android自动加上。方法的第二个参数指定文件的操作模式,共有四种操作模式,这四种模式前面介绍使用文件方式保存数据时已经讲解过。如果希望SharedPreferences背后使用的xml文件能被其他应用读和写,可以指定Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE权限。

另外Activity还提供了另一个getPreferences(mode)方法操作SharedPreferences,这个方法默认使用当前类不带包名的类名作为文件的名称。

              

                   

访问SharedPreferences中的数据

访问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>应替换成应用的包名

             

案例:

string.xml文件



<?
   
   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布局文件



<?
   
   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
   
   >


                      



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



            

运行结果


SharedPreferences ListPreference 存编号 sharedpreferences存放的数据类型不支持,SharedPreferences ListPreference 存编号 sharedpreferences存放的数据类型不支持_xml文件,第1张

               

                  

如何访问其他应用中的Preference?


按 Ctrl+C 复制代码



按 Ctrl+C 复制代码


https://www.xamrdz.com/lan/5e41923473.html

相关文章: