本篇文章為大家展示了SharedPreferences如何在android中實(shí)現(xiàn)數(shù)據(jù)存儲(chǔ),內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過(guò)這篇文章的詳細(xì)介紹希望你能有所收獲。
讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來(lái)自于我們對(duì)這個(gè)行業(yè)的熱愛。我們立志把好的技術(shù)通過(guò)有效、簡(jiǎn)單的方式提供給客戶,將通過(guò)不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:國(guó)際域名空間、網(wǎng)頁(yè)空間、營(yíng)銷軟件、網(wǎng)站建設(shè)、通化縣網(wǎng)站維護(hù)、網(wǎng)站推廣。
Android平臺(tái)給我們提供了一個(gè)SharedPreferences類,它是一個(gè)輕量級(jí)的存儲(chǔ)類,特別適合用于保存軟件配置參數(shù)。使用SharedPreferences保存數(shù)據(jù),其背后是用xml文件存放數(shù)據(jù),文件存放在/data/data/
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' ?>
因?yàn)镾haredPreferences背后是使用xml文件保存數(shù)據(jù),getSharedPreferences(name,mode)方法的第一個(gè)參數(shù)用于指定該文件的名稱,名稱不用帶后綴,后綴會(huì)由Android自動(dòng)加上。方法的第二個(gè)參數(shù)指定文件的操作模式,共有四種操作模式,這四種模式前面介紹使用文件方式保存數(shù)據(jù)時(shí)已經(jīng)講解過(guò)。如果希望SharedPreferences背后使用的xml文件能被其他應(yīng)用讀和寫,可以指定Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE權(quán)限。
另外Activity還提供了另一個(gè)getPreferences(mode)方法操作SharedPreferences,這個(gè)方法默認(rèn)使用當(dāng)前類不帶包名的類名作為文件的名稱。
訪問(wèn)SharedPreferences中的數(shù)據(jù)
訪問(wèn)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);
如果訪問(wèn)其他應(yīng)用中的Preference,前提條件是:該preference創(chuàng)建時(shí)指定了Context.MODE_WORLD_READABLE或者Context.MODE_WORLD_WRITEABLE權(quán)限。
如:有個(gè)
getSharedPreferences("ljq", Context.MODE_WORLD_READABLE);
其他應(yīng)用要訪問(wèn)上面應(yīng)用的preference,首先需要?jiǎng)?chuàng)建上面應(yīng)用的Context,然后通過(guò)Context 訪問(wèn)preference ,訪問(wèn)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);
如果不通過(guò)創(chuàng)建Context訪問(wèn)其他應(yīng)用的preference,也可以以讀取xml文件方式直接訪問(wèn)其他應(yīng)用preference對(duì)應(yīng)的xml文件,如:
案例:
string.xml文件
<?xml version="1.0" encoding="utf-8"?>Hello World, SpActivity! 軟件配置參數(shù) 姓名 年齡 保存設(shè)置 顯示
main.xml布局文件
<?xml version="1.0" encoding="utf-8"?>
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//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é)果
如何訪問(wèn)其他應(yīng)用中的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"; /** * 訪問(wèn)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); } /** * 訪問(wèn)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); } }
上述內(nèi)容就是SharedPreferences如何在android中實(shí)現(xiàn)數(shù)據(jù)存儲(chǔ),你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。