亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > Android > 正文

android中使用SharedPreferences進行數據存儲的操作方法

2020-04-11 12:27:05
字體:
來源:轉載
供稿:網友

很多時候我們開發的軟件需要向用戶提供軟件參數設置功能,例如我們常用的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,這個方法默認使用當前類不帶包名的類名作為文件的名稱。                                

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


運行結果



如何訪問其他應用中的Preference?

復制代碼 代碼如下:

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久久国产精品一区| 国产精品一区=区| 国产精品久久久久久av福利软件| 国产欧美日韩最新| 91国产视频在线| 国产97在线视频| 成人黄色免费看| 色综合老司机第九色激情| 97香蕉超级碰碰久久免费的优势| 88国产精品欧美一区二区三区| 欧美日韩在线影院| 精品久久香蕉国产线看观看亚洲| 精品久久久久久| 免费91麻豆精品国产自产在线观看| 91精品国产色综合| 日韩欧美一区二区三区久久| 2019av中文字幕| 国模精品视频一区二区| 国产91精品黑色丝袜高跟鞋| 北条麻妃在线一区二区| 97成人精品区在线播放| 久久精品国产精品| 狠狠久久五月精品中文字幕| 欧美日韩国产一区二区| 亚洲电影免费观看高清| 精品女厕一区二区三区| 中文字幕亚洲一区二区三区五十路| 成人中文字幕+乱码+中文字幕| 精品国产拍在线观看| 国产成人综合一区二区三区| 国产91精品视频在线观看| 中文字幕国产亚洲2019| 欧美与欧洲交xxxx免费观看| 欧美视频在线免费| 精品综合久久久久久97| 久久综合免费视频| 国产激情视频一区| 日韩精品高清视频| 久久黄色av网站| 欧美日韩国产成人| 欧日韩不卡在线视频| 日韩欧美亚洲国产一区| 亚洲老头同性xxxxx| 亚洲二区在线播放视频| 精品国产一区二区在线| 欧美成人一二三| 欧美性猛交xxxx富婆弯腰| 成人伊人精品色xxxx视频| 一区二区三区回区在观看免费视频| 亚洲精品99999| 亚洲视频在线免费看| 国产成人精品免高潮在线观看| 日韩极品精品视频免费观看| 欧美精品中文字幕一区| 欧美激情视频在线| 国产在线一区二区三区| 亚洲国产另类久久精品| 亚洲国产精品大全| 国产69精品久久久久9999| 国产精品久久久久久久久久久久久| 日韩成人激情影院| 亚洲欧美国产另类| 久久色在线播放| 欧美日韩免费区域视频在线观看| 国产精品欧美日韩一区二区| 波霸ol色综合久久| 97精品国产aⅴ7777| 国产亚洲欧洲高清一区| 国产在线观看一区二区三区| 久久露脸国产精品| 91精品国产91久久久久久不卡| 91热福利电影| 日本最新高清不卡中文字幕| 亚洲综合av影视| 亚洲男女自偷自拍图片另类| 日本一区二区不卡| 亚洲美女www午夜| 日韩精品在线观| 国产午夜精品久久久| 亚洲女在线观看| 久久男人资源视频| 国产不卡av在线免费观看| 日本一区二区三区在线播放| 亚洲视频在线观看网站| 成人有码在线视频| 欧美猛交ⅹxxx乱大交视频| 一本色道久久综合狠狠躁篇的优点| 国产自产女人91一区在线观看| 一本色道久久综合狠狠躁篇的优点| 欧美激情乱人伦一区| 超碰精品一区二区三区乱码| 欧美日韩精品在线观看| 亚洲电影中文字幕| 91精品国产91| 亚洲美女精品成人在线视频| 亚洲开心激情网| 国产精品视频精品视频| 欧美性受xxxx黑人猛交| 38少妇精品导航| 欧美成人久久久| 成人国产精品日本在线| 91精品久久久久久久久| 久久亚洲私人国产精品va| 亚洲电影免费观看高清完整版| 91精品国产91久久久久久久久| 中文字幕免费精品一区高清| 97精品在线观看| 日韩成人网免费视频| 精品亚洲va在线va天堂资源站| 日韩av手机在线| 国产精品免费看久久久香蕉| 影音先锋欧美在线资源| 这里精品视频免费| 国产精品男女猛烈高潮激情| 欧美理论电影在线播放| 日韩中文字幕在线精品| 国产日韩欧美日韩大片| 在线视频欧美日韩精品| 欧美一级淫片播放口| 亚洲欧洲在线看| 国内精品模特av私拍在线观看| 91精品啪aⅴ在线观看国产| 国产精品日韩在线| 91高清视频免费| 精品视频一区在线视频| 久久国产精品亚洲| 91精品国产91久久久久久| 国产精品视频在线播放| 国产亚洲视频中文字幕视频| 国产亚洲精品va在线观看| 久久精品国产成人精品| 国产精品久久久久久亚洲影视| 国产69精品久久久久99| 国产欧美婷婷中文| 欧美在线视频观看免费网站| 国语自产精品视频在线看一大j8| 精品小视频在线| 日韩精品电影网| 国产女人18毛片水18精品| 国产精品专区第二| 91色在线观看| 亚洲欧美综合精品久久成人| 中文字幕日本精品| 91国产精品91| 欧美激情在线观看| 日韩成人在线网站| 欧美一区二区影院| 亚洲国产精品久久久久秋霞不卡| 日韩av免费看| 成人国产在线视频| 97国产精品视频人人做人人爱| 韩曰欧美视频免费观看| 尤物tv国产一区| 91九色综合久久| 日韩欧美在线视频观看| 国产精品自产拍在线观看中文| 亚洲欧美激情四射在线日| 国产精品情侣自拍| 日韩精品视频免费在线观看| 91久久精品久久国产性色也91| 岛国av一区二区| 亚洲精品一区中文| 国产精品美女呻吟| 亚洲综合国产精品|