色偷偷偷亚洲综合网另类,亚洲欧美另类在线观看,欧美午夜激情在线,久久久精品一区

當(dāng)前位置:首頁 > 嵌入式培訓(xùn) > 嵌入式學(xué)習(xí) > 講師博文 > 利用Java反射機(jī)制改變SharedPreferences存儲(chǔ)路徑

利用Java反射機(jī)制改變SharedPreferences存儲(chǔ)路徑 時(shí)間:2018-09-21      來源:未知

近在做一個(gè)項(xiàng)目,想到要使用SharedPreferences類去存儲(chǔ)一些簡單的數(shù)據(jù),但是我們知道,使用SharedPreferences保存數(shù)據(jù),其實(shí)質(zhì)是采用了xml文件存放數(shù)據(jù),路徑為:/data/data/<package name>/shared_prefs. 但是有些時(shí)候,我們不想將xml文件存儲(chǔ)到SharedPreferences累指定的目錄下,比如說,我想將xml文件存儲(chǔ)到sdcard下面,這個(gè)時(shí)候,我們?cè)撛趺崔k呢?

我們知道,SharedPreferences是封裝好的類,我們只能使用類提供的方法,但是我們也知道,使用java的反射機(jī)制,類在我們面前就是透明的,我們可以任意使用類中的方法,變量,構(gòu)造器等等。所以,這里,我想到使用java的反射機(jī)制去解決這個(gè)問題。但是在使用java的反射機(jī)制之前,有些概念我們還是要了解的。

Context類路徑:/frameworks/base/core/java/android/content/Context.java

說明:抽象類,提供了一組通用的API。

源代碼(部分)如下:

public abstract class Context {

...

public abstract Object getSystemService(String name); //獲得系統(tǒng)級(jí)服務(wù)

public abstract void startActivity(Intent intent); //通過一個(gè)Intent啟動(dòng)Activity

public abstract ComponentName startService(Intent service); //啟動(dòng)Service

//根據(jù)文件名得到SharedPreferences對(duì)象

public abstract SharedPreferences getSharedPreferences(String name,int mode);

...

}

ContextIml.java類 路徑 :/frameworks/base/core/java/android/app/ContextImpl.java

說明:該Context類的實(shí)現(xiàn)類為ContextIml,該類實(shí)現(xiàn)了Context類的功能。請(qǐng)注意,該函數(shù)的大部分功能都是直接調(diào)用。

其屬性mPackageInfo去完成。

源代碼(部分)如下:

/**

* Common implementation of Context API, which provides the base

* context object for Activity and other application components.

*/

class ContextImpl extends Context{

//所有Application程序公用一個(gè)mPackageInfo對(duì)象

/*package*/ ActivityThread.PackageInfo mPackageInfo;

@Override

public Object getSystemService(String name){

...

else if (ACTIVITY_SERVICE.equals(name)) {

return getActivityManager();

}

else if (INPUT_METHOD_SERVICE.equals(name)) {

return InputMethodManager.getInstance(this);

}

}

@Override

public void startActivity(Intent intent) {

...

//開始啟動(dòng)一個(gè)Activity

mMainThread.getInstrumentation().execStartActivity(

getOuterContext(), mMainThread.getApplicationThread(), null, null, intent, -1);

}

}

ContextWrapper類 路徑 :\frameworks\base\core\java\android\content\ContextWrapper.java

說明: 正如其名稱一樣,該類只是對(duì)Context類的一種包裝,該類的構(gòu)造函數(shù)包含了一個(gè)真正的Context引用,即ContextIml對(duì)象。源代碼(部分)如下:

public class ContextWrapper extends Context {

Context mBase; //該屬性指向一個(gè)ContextIml實(shí)例,一般在創(chuàng)建Application、Service、Activity時(shí)賦值

//創(chuàng)建Application、Service、Activity,會(huì)調(diào)用該方法給mBase屬性賦值

protected void attachBaseContext(Context base) {

if (mBase != null) {

throw new IllegalStateException("Base context already set");

}

mBase = base;

}

@Override

public void startActivity(Intent intent) {

mBase.startActivity(intent); //調(diào)用mBase實(shí)例方法

}

}

Context相關(guān)類的繼承關(guān)系

利用Java反射機(jī)制改變SharedPreferences存儲(chǔ)路徑

SharedPreferences原則上只能保存在當(dāng)前應(yīng)用程序私有的Shared_prefs目錄中,但利用Java的反射機(jī)制可以改變系統(tǒng)內(nèi)定的文件存儲(chǔ)路徑。

例如:將config.xml文件保存在SD卡的根目錄中。

private void savePreToSDcard() {

try {

Field field; // 獲取ContextWrapper對(duì)象中的mBase變量。該變量保存了ContextImpl對(duì)象

field = ContextWrapper.class.getDeclaredField("mBase");

field.setAccessible(true);

// 獲取mBase變量

Object obj = field.get(this);

// 獲取ContextImpl.mPreferencesDir變量,該變量保存了數(shù)據(jù)文件的保存路徑

field = obj.getClass().getDeclaredField("mPreferencesDir");

field.setAccessible(true);

// 創(chuàng)建自定義路徑

File file = new File("/sdcard");

// 修改mPreferencesDir變量的值

field.set(obj, file);

SharedPreferences mySharedPreferences = getSharedPreferences( "config", Activity.MODE_PRIVATE);

SharedPreferences.Editor editor = mySharedPreferences.edit();

editor.putString("name", "20130310");

editor.commit();

} catch (NoSuchFieldException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IllegalArgumentException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IllegalAccessException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

上一篇:Coretex_M0工程創(chuàng)建

下一篇:安卓中實(shí)現(xiàn)藍(lán)牙通信的工具

熱點(diǎn)文章推薦
華清學(xué)員就業(yè)榜單
高薪學(xué)員經(jīng)驗(yàn)分享
熱點(diǎn)新聞推薦
前臺(tái)專線:010-82525158 企業(yè)培訓(xùn)洽談專線:010-82525379 院校合作洽談專線:010-82525379 Copyright © 2004-2022 北京華清遠(yuǎn)見科技集團(tuán)有限公司 版權(quán)所有 ,京ICP備16055225號(hào)-5京公海網(wǎng)安備11010802025203號(hào)

回到頂部

色偷偷偷亚洲综合网另类,亚洲欧美另类在线观看,欧美午夜激情在线,久久久精品一区
主站蜘蛛池模板: 91在线无精精品一区二区| 中文字幕日韩欧美| 亚洲免费视频观看| 久热在线中文字幕色999舞| 黑人精品xxx一区一二区| 91超碰caoporn97人人| 成人观看高清在线观看免费| 在线免费看av不卡| 午夜精品久久久久久久99黑人| 欧美在线视频在线播放完整版免费观看 | 高清一区二区三区四区五区| 国产精品免费久久久久影院| 亚洲欧美另类人妖| 岛国av一区二区三区| 成人夜晚看av| 久久久极品av| 国产中文字幕亚洲| 欧美日韩国产丝袜另类| 成人国产亚洲精品a区天堂华泰| 日韩一区二区精品视频| 国产精品色午夜在线观看| 色综久久综合桃花网| 国产精品中文字幕在线观看| 最近2019年日本中文免费字幕| 日韩免费观看av| xxx成人少妇69| 91在线色戒在线| 国产做受高潮69| 伊人亚洲福利一区二区三区| 国产精品高潮呻吟久久av黑人| 欧美xxxx14xxxxx性爽| 成人国产在线激情| 国外成人在线直播| 日韩在线视频国产| 亚洲成人久久一区| 奇米影视亚洲狠狠色| 欧美成年人视频| 国产一区二区三区丝袜| 国产情人节一区| 91精品国产高清久久久久久久久| 色多多国产成人永久免费网站|