国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Android > 正文

android使用SharedPreferences進行數據存儲

2019-12-12 03:39:40
字體:
來源:轉載
供稿:網友

很多時候我們開發(fā)的軟件需要向用戶提供軟件參數設置功能,例如我們常用的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創(chuàng)建時指定了Context.MODE_WORLD_READABLE或者Context.MODE_WORLD_WRITEABLE權限。

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

getSharedPreferences("ljq", Context.MODE_WORLD_READABLE);

其他應用要訪問上面應用的preference,首先需要創(chuàng)建上面應用的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);

如果不通過創(chuàng)建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); }}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 平潭县| 高邮市| 德化县| 吉安县| 滁州市| 凤阳县| 宣恩县| 贵阳市| 贡嘎县| 新竹市| 盖州市| 洛川县| 久治县| 石柱| 宜昌市| 自治县| 潮安县| 客服| 洞头县| 大厂| 金阳县| 阜宁县| 鹤山市| 凉山| 弥渡县| 崇明县| 宁海县| 太康县| 全椒县| 苏尼特左旗| 临泽县| 奎屯市| 荔波县| 金华市| 鸡西市| 铁岭市| 南溪县| 达孜县| 康马县| 苏尼特左旗| 阳新县|