欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

android中使用SharedPreferences進(jìn)行數(shù)據(jù)存儲(chǔ)的操作方法

 更新時(shí)間:2013年04月27日 12:42:33   作者:  
本篇文章介紹了,在android中使用SharedPreferences進(jìn)行數(shù)據(jù)存儲(chǔ)的操作方法。需要的朋友參考下

很多時(shí)候我們開發(fā)的軟件需要向用戶提供軟件參數(shù)設(shè)置功能,例如我們常用的QQ,用戶可以設(shè)置是否允許陌生人添加自己為好友。對于軟件配置參數(shù)的保存,如果是window軟件通常我們會(huì)采用ini文件進(jìn)行保存,如果是 j2se應(yīng)用,我們會(huì)采用properties屬性文件或者xml進(jìn)行保存。如果是Android應(yīng)用,我們最適合采用什么方式保存軟件配置參數(shù)呢?Android 平臺(tái)給我們提供了一個(gè)SharedPreferences類,它是一個(gè)輕量級(jí)的存儲(chǔ)類,特別適合用于保存軟件配置參數(shù)。使用 SharedPreferences保存數(shù)據(jù),其背后是用xml文件存放數(shù)據(jù),文件存放在/data/data/<package name>/shared_prefs目錄下

SharedPreferences sharedPreferences = getSharedPreferences("ljq", Context.MODE_PRIVATE);

Editor editor = sharedPreferences.edit();//獲取編輯器

editor.putString("name", "林計(jì)欽");

editor.putInt("age", 24);

editor.commit();//提交修改                  

生成的ljq.xml文件內(nèi)容如下:

<?xml version='1.0' encoding='utf-8' standalone='yes' ?>

<map>

   <string name="name">林計(jì)欽</string>

   <int name="age" value="24" />

</map>

因?yàn)镾haredPreferences背后是使用xml文件保存數(shù)據(jù),getSharedPreferences(name,mode)方法的第一個(gè)參數(shù)用于指定該文件的名稱,名稱不用帶后綴,后綴會(huì)由Android自動(dòng)加上。方法的第二個(gè)參數(shù)指定文件的操作模式,共有四種操作模式,這四種模式前面介紹使用文件方式保存數(shù)據(jù)時(shí)已經(jīng)講解過。如果希望SharedPreferences背后使用的xml文件能被其他應(yīng)用讀和寫,可以指定Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE權(quán)限。

另外Activity還提供了另一個(gè)getPreferences(mode)方法操作SharedPreferences,這個(gè)方法默認(rèn)使用當(dāng)前類不帶包名的類名作為文件的名稱。                                

訪問SharedPreferences中的數(shù)據(jù)

訪問SharedPreferences中的數(shù)據(jù)代碼如下:

SharedPreferences sharedPreferences = getSharedPreferences("ljq", Context.MODE_PRIVATE);

//getString()第二個(gè)參數(shù)為缺省值,如果preference中不存在該key,將返回缺省值

String name = sharedPreferences.getString("name", "");

int age = sharedPreferences.getInt("age", 1);

如果訪問其他應(yīng)用中的Preference,前提條件是:該preference創(chuàng)建時(shí)指定了Context.MODE_WORLD_READABLE或者Context.MODE_WORLD_WRITEABLE權(quán)限。

如:有個(gè)<package name>為com.ljq.action的應(yīng)用使用下面語句創(chuàng)建了preference。

getSharedPreferences("ljq", Context.MODE_WORLD_READABLE);

其他應(yīng)用要訪問上面應(yīng)用的preference,首先需要?jiǎng)?chuàng)建上面應(yīng)用的Context,然后通過Context 訪問preference ,訪問preference時(shí)會(huì)在應(yīng)用所在包下的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);

如果不通過創(chuàng)建Context訪問其他應(yīng)用的preference,也可以以讀取xml文件方式直接訪問其他應(yīng)用preference對應(yīng)的xml文件,如:

File xmlFile = new File("/data/data/<package name>/shared_prefs/itcast.xml");//<package name>應(yīng)替換成應(yīng)用的包名                      

案例:

string.xml文件

復(fù)制代碼 代碼如下:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="hello">Hello World, SpActivity!</string>
    <string name="app_name">軟件配置參數(shù)</string>
    <string name="name">姓名</string>
    <string name="age">年齡</string>
    <string name="button">保存設(shè)置</string>
    <string name="showButton">顯示</string>
</resources>

main.xml布局文件
復(fù)制代碼 代碼如下:

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

復(fù)制代碼 代碼如下:

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


運(yùn)行結(jié)果



如何訪問其他應(yīng)用中的Preference?

復(fù)制代碼 代碼如下:

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的方式一,注:權(quán)限要足夠
     * @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);
        //獲取的是一個(gè)xml字符串
        String data = new FileService().read(inputStream);
        Log.i(TAG, data);
    }

    /**
     * 訪問SharePreference的方式二,注:權(quán)限要足夠
     * @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);
    }
}

相關(guān)文章

最新評(píng)論