精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

了解Android API中的SharedPreferences

移動開發 Android
在Android的開發過程中,會在使用的API中見到很多名字中帶有Preference的類和接口,此篇文章就來介紹一下這些“*Prefere*”的功能和用途。

[[181260]]

Preference翻譯為偏好,但實際上它可以算是Setting(設置)的別名。兩種叫法給人的差異在于針對的對象不同:設置更傾向于設備的屬性,修改設置便是改變設備的功能;偏好則傾向于用戶的性格,用戶基于其個人的偏好來來形成設備的差異化。但是總體而言,它們是一致的,都是通過用戶的需求改變設備的體驗。

在Android的開發過程中,會在使用的API中見到很多名字中帶有Preference的類和接口,此篇文章就來介紹一下這些“*Prefere*”的功能和用途。

在Android提供API中,帶有Preference的其實主要分為兩類:一類是android.content包下的SharedPreferences,另一類則是android.preference包下的Preference。它們分別實現不同功能,卻又相互聯系合作完成對Android程序的控制。

SharedPreferences簡介

SharedPreferences是以復數形式存在,因為在Android中它是用來存儲鍵值對(Key-Value Pair)數據的集合。API中包含了多個方法來方面讀取相應類型的數據:

  1. String getString(String key, String defValue); 
  2. Set<String> getStringSet(String keySet<String> defValues); 
  3. int getInt(String keyint defValue); 
  4. long getLong(String key, long defValue); 
  5. float getFloat(String keyfloat defValue); 
  6. boolean getBoolean(String key, boolean defValue);  

這也表明SharedPreferences所能存儲的類型被限定在了String、int、long、float、boolean這些基礎數據類中,唯一的集合類型也只是Set,而它看起來更像是用來作為不能有重復數據的數組。

還可以單純檢查是否包換指定的主鍵,或者干脆將所有的鍵值對的Map獲取出來:

  1. boolean contains(String key);     
  2. Map<String, ?> getAll();  

Android系統的工程師在設計SharedPreferences的時候,把讀取的功能放在了SharedPreferences上,而把寫回的功能實現在了其內嵌的Editor類上,通過調用edit()方法來獲得一個寫入器。這樣就很容易實現一個只讀的對象,只要返回一個空指針或非可用的Editor對象就可以了。 

  1. Editor putString(String key, String value); 
  2. Editor putStringSet(String keySet<String> values); 
  3. Editor putInt(String keyint value); 
  4. Editor putLong(String key, long value); 
  5. Editor putFloat(String keyfloat value); 
  6. Editor putBoolean(String key, boolean value); 
  7. Editor remove(String key);  

SharedPreferences還有一個內嵌接口OnSharedPreferenceChangeListener,實現它唯一的方法onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key)并通過以下方法添加在SharedPreferences對象上就可以監聽其上鍵值對的增加、刪除和修改:

  1. void registerOnSharedPreferenceChangeListener(OnSharedPreferenceChangeListener listener); 
  2. void unregisterOnSharedPreferenceChangeListener(OnSharedPreferenceChangeListener listener);  

SharedPreferences的在Android系統中的實現

SharedPreferences和內嵌的Editor其實都只是接口定義而已,并沒有實現任何方法。它只是用來制定了一個存儲鍵值對的協議,具體的實現方式和存儲形式可以是任意的。在Android系統中,它默認以XML格式的文件來存儲這些數據,實現的類則是SharedPreferencesImpl。

下邊就是所保存的XML文件的基本格式,它以數據類型作為XML元素的標簽,主鍵(key)是標簽name屬性的值,而主鍵對應的值則作為value屬性的值。但如果是String類型則作為標簽下的content,這樣就不用轉義引號也能更好的處理換行。另外對于null值存儲的結構也比較特殊,它以null為標簽,只有一個name屬性,沒有其他內容。 

  1. <?xml version='1.0' encoding='utf-8' standalone='yes' ?> 
  2. <map> 
  3.     <string name="Name">Ider</string> 
  4.     <boolean name="Android" value="true" /> 
  5.     <set name="Subsites"
  6.         <string>code.iderzheng.com</string> 
  7.         <string>blog.iderzheng.com</string> 
  8.         <string>manual.iderzheng.com</string> 
  9.     </set
  10.     <int name="VersionCode" value="21" /> 
  11.     <long name="VersionNumber" value="1355" /> 
  12.     <float name="Version" value="5.0" /> 
  13.     <null name="Null" /> 
  14. </map>  

Android系統會把該XML文件存儲在/data/data/(packagename)/shared_prefs/下,每一個XML文件就對應一個SharedPreferences對象(實際是SharedPreferencesImpl對象)。但是SharedPreferences是接口不能用來實例化對象,而SharedPreferencesImpl是系統隱藏類,不能被直接訪問使用,其構造函數也只是包可見。所以不能通過new來構建一個SharedPreferences,必須通過Context提供的getSharedPreferences(String, int)來獲得實例。

該方法的***個參數是指定XML文件名(不包含“.xml”后綴)的字符串,方法會去讀取出對應的文件,創建一個SharedPreferences對象。第二個參數指定文件的訪問權限,共有4中可選模式,從API 17開始基于安全的考慮,MODE_WORLD_READABLE和MODE_WORLD_WRITEABLE已經被廢棄使用,只有MODE_PRIVATE和MODE_MULTI_PROCESS可使用,一般情況下指定MODE_PRIVATE即可。

對于從SharedPreferences中讀取指定主鍵的值是十分快的,因為所有存在XML的鍵值對信息全都被讀取被存儲在了SharedPreferences對象中的Map成員變量里,所以讀取都是基于內存訪問。使用Editor寫回到文件是避不開IO操作的,所以使用commit()提交修改還是會花費一些時間。考慮到這點,Android在API 9里引進了apply()方法來異步地將修改后的內容寫回到文件,當然在寫回前也會先更新內存中的鍵值對信息保證讀取到的時***的內容。

既然寫回可以是異步的,那么多次調用getSharedPreferences(String, int)獲得多個SharedPreferences賦值給不同的變量,假如一個變量做了修改,其他的對象不是會出現內容不一致的情況。其實這種情況并不會出現,因為所有創建出來的SharedPreferences都被存儲在ContextImp的一個靜態成員變量中:

  1. /** 
  2. * Map from package nameto preference nameto cached preferences. 
  3. */ 
  4. private static ArrayMap<String, ArrayMap<String, SharedPreferencesImpl>> sSharedPrefs;  

這是一個從程序的Package名字到XML文件名再到SharedPreferences對象的二級Map。所以每次調用getSharedPreferences(String, int)得到的對象其實都是同一個實例,修改操作也都就作用在同一段內存中保證了所有訪問的一致性。apply()方法也會自動將所有修改排入隊列一一寫回文件從而不會因為順序的錯誤而造成意料之外的錯誤覆蓋。所以因為這個緩存機制的存在,多次調用getSharedPreferences(String, int)是非常效率的。而寫回時則推薦使用apply()實現異步操作,而不要用commit()阻礙主線程。

SharedPreferences的使用和示例

一般而言SharedPreferences的名字和主鍵名都是固定的,所以可以定義一些final的字符串變量來保存這些名字,在讀取和寫回時都使用這些常熟變量。對于之前展示的XML對應的代碼就如下邊所示: 

  1. private static final String IDER_PREFERENCE = "ider-preference"
  2. private static final String IDER_PREFERENCE_KEY_NAME = "Name"
  3. private static final String IDER_PREFERENCE_KEY_SUBSITES = "Subsites"
  4. private static final String IDER_PREFERENCE_KEY_IS_ANDROID = "Android"
  5. private static final String IDER_PREFERENCE_KEY_VERSION = "Version"
  6. private static final String IDER_PREFERENCE_KEY_VERSION_CODE = "VersionCode"
  7. private static final String IDER_PREFERENCE_KEY_VERSION_NUMBER = "VersionNumber"
  8. private static final String IDER_PREFERENCE_KEY_NULL = "Null"
  9. public void write(Context context) { 
  10.     final SharedPreferences spref = context.getSharedPreferences(IDER_PREFERENCE, MODE_PRIVATE); 
  11.     HashSet<String> strs = new HashSet<String>(); 
  12.     strs.add("blog.iderzheng.com"); 
  13.     strs.add("code.iderzheng.com"); 
  14.     strs.add("manual.iderzheng.com"); 
  15.     SharedPreferences.Editor editor = spref.edit(); 
  16.     editor.putString(IDER_PREFERENCE_KEY_NAME, "Ider"); 
  17.     editor.putStringSet(IDER_PREFERENCE_KEY_SUBSITES, strs); 
  18.     editor.putBoolean(IDER_PREFERENCE_KEY_IS_ANDROID, true); 
  19.     editor.putFloat(IDER_PREFERENCE_KEY_VERSION, 5.0f); 
  20.     editor.putInt(IDER_PREFERENCE_KEY_VERSION_CODE, 21); 
  21.     editor.putLong(IDER_PREFERENCE_KEY_VERSION_NUMBER, 1355); 
  22.     editor.putString(IDER_PREFERENCE_KEY_NULL, null); 
  23.     editor.apply(); 
  24. public void read(Context context) { 
  25.     final SharedPreferences spref = context.getSharedPreferences(IDER_PREFERENCE, MODE_PRIVATE); 
  26.     String name = spref.getString(IDER_PREFERENCE_KEY_NAME, ""); 
  27.     Set<String> strs = spref.getStringSet(IDER_PREFERENCE_KEY_SUBSITES, null); 
  28.     boolean isAndroid = spref.getBoolean(IDER_PREFERENCE_KEY_IS_ANDROID, false); 
  29.     float version = spref.getFloat(IDER_PREFERENCE_KEY_VERSION, 0); 
  30.     int versionCode = spref.getInt(IDER_PREFERENCE_KEY_VERSION_CODE, 0); 
  31.     long versionNumber = spref.getLong(IDER_PREFERENCE_KEY_VERSION_NUMBER, 0); 
  32.     boolean hasKey = spref.contains(IDER_PREFERENCE_KEY_NULL); 
  33.  

既然SharedPreferences的名字是可以任意給定的,所以對于SharedPreferences的使用就可以有非常的針對性創建不同的文件來存儲不同的內容。比如可以以不同用戶為名存放他們的偏好信息,可以根據不同界面保存布局信息、已訪問的頁碼。Activity就額外實現了獲取SharedPreferences的方法getPreferences(int),它只需要開發者提供文件的打開模式,自動以Activity的類名作為文件名。

SharedPreferences取值時是直接將給定主鍵在Map中的值強制轉換成所需要的值,所以如果用putInt存儲了整型卻用getBoolean()來取,并不會自動轉換成布爾型,而是直接拋出異常,所以要使用要注意保持類型一致。

另外如果沒有存儲過某個主鍵,SharedPreferences會返回null值,而對于String、Set這些類型同樣可以存儲null值,這樣就不能確定null是不是真是存儲的數據了。因此SharedPreferences還提供了contains (String key)方法來檢查給定的主鍵是真的存了null,還是因為并沒有這個鍵值對才返回的null。

SharedPreferences的優缺點

之前講過所以讀取過的SharedPreferences的文件都會被緩存在Map里放在內存中,以便下次直接快速訪問,因為快事SharedPreferences的一大優點。但是也因為都背緩存,而且存放格式是XML,所以SharedPreferences不宜存放過多的鍵值對,值的內容也不能太大。再者SharedPreferences只支持最基本的幾種類型,存儲一些用戶基本信息也足夠了。

如果對設備有root權限,那么就可以直接訪問/data/data/(packagename)/shared_prefs/目錄,將XML文件轉出來查看。或者直接用在adb shell下直接用cat指令觀察數據的改變,非常的方便。

綜合而言,存儲一些內容較小、類型簡單的數據,SharedPreferences絕對是***對象。

責任編輯:龐桂玉 來源: 安卓開發精選
相關推薦

2023-11-09 08:22:38

2011-05-31 17:32:32

Android SharedPref

2022-08-04 18:50:12

Navigator瀏覽器設備

2023-12-09 08:58:30

AndroidActivity啟動模式

2023-12-05 08:20:57

Android系統

2020-04-13 10:37:46

API編程設計

2023-11-06 07:23:06

API開發生態系統

2012-07-25 13:25:11

ibmdw

2011-09-07 13:30:48

Android WidTabWidget

2020-07-09 08:01:48

JavaScriptES模塊

2023-11-26 09:06:46

2020-06-18 09:16:20

JavaScript緩存API

2020-07-29 09:13:28

JavaScript開發技術

2023-10-26 11:19:21

指針Go

2021-05-25 05:25:24

MySQL數據庫

2023-05-06 08:53:13

2017-01-20 08:30:19

JavaScriptfor循環

2013-09-13 15:01:58

2012-02-06 13:52:33

JavaScript

2019-11-29 16:21:22

Spring框架集成
點贊
收藏

51CTO技術棧公眾號

久久精品一区二区三区不卡牛牛| 欧美日韩亚洲三区| 欧美三级韩国三级日本三斤| 中文字幕成人一区| 亚洲av永久无码国产精品久久| 影音先锋亚洲电影| 国产一区二区日韩| 韩国三级在线播放| 中文字幕在线视频久| 中文字幕中文字幕在线一区 | 电影一区二区三| 中文字幕亚洲成人| 麻豆成人在线播放| 国产成人精品av在线观| 久久久夜精品| 欧美精品久久久久| 国产jizz18女人高潮| 精品三级av在线导航| 欧美日韩aaaaaa| 精品国产免费av| 污片在线免费观看| 欧美国产激情一区二区三区蜜月| 国产精品伊人日日| 国产精品久久久久精| 先锋影音久久久| 久久久这里只有精品视频| 911国产在线| 亚洲电影一级片| 日韩视频免费观看高清完整版| 波多野结衣作品集| 国产高清自产拍av在线| 一区二区三区四区国产精品| 午夜精品短视频| 日韩av资源| 成人午夜看片网址| 亚洲伊人久久综合| 亚洲一区二区三区高清视频| 视频一区视频二区中文字幕| 国内精品久久久久久中文字幕| 日本中文在线视频| 欧美激情成人| 日韩在线观看免费全集电视剧网站 | avove在线播放| 99久久精品费精品国产风间由美| 亚洲天堂男人天堂| 国产精品815.cc红桃| 你懂的在线观看一区二区| 日韩欧美成人一区| 午夜影院免费版| 91九色成人| 在线播放中文一区| 182午夜在线观看| 韩国精品视频在线观看| 欧美在线观看禁18| 99视频免费播放| 日韩av免费| 欧美日韩在线播放一区| 亚洲这里只有精品| 欧美成人三级| 91麻豆精品久久久久蜜臀| 在线观看免费不卡av| 午夜精品久久久久久毛片| 欧美日韩国产精品成人| 免费黄频在线观看| 日韩中文字幕视频网| 日韩免费视频线观看| 免费黄色av网址| 精品久久ai电影| 亚洲精品ady| 精品人妻一区二区三区香蕉 | 电影一区二区三| 在线观看亚洲精品| 狠狠躁狠狠躁视频专区| 日韩av黄色| 日韩精品一区二区三区中文精品| 无码人妻一区二区三区在线| 欧美理论电影在线精品| 亚洲欧美中文日韩v在线观看| 成都免费高清电影| 亚洲激情中文在线| 91chinesevideo永久地址| 久久久精品毛片| 美国十次了思思久久精品导航| 成人免费淫片视频软件| 国产 欧美 自拍| 国产婷婷精品av在线| 椎名由奈jux491在线播放 | 天天色图综合网| 日本精品一区二区三区四区| 国产精品亚洲成在人线| 日韩欧美中文字幕一区| 色噜噜在线观看| 97精品视频| 久久久久久亚洲精品| 精品人妻一区二区色欲产成人| 久久99精品久久久久久动态图| 91九色露脸| 黄色片在线免费观看| 亚洲视频在线观看三级| 波多野结衣家庭教师在线| 国产精品麻豆成人av电影艾秋| 精品日韩欧美一区二区| 午夜精产品一区二区在线观看的| 欧美在线亚洲综合一区| av中文字幕一区二区三区| 99re在线国产| 午夜影院免费体验区| 欧美激情资源网| 成人小视频在线观看免费| 亚洲性色av| 日韩欧美精品在线| 中文字幕免费视频| 欧美国内亚洲| 国产精品国产自产拍高清av水多| 亚洲欧美高清视频| 国产精品传媒视频| 精品国产免费av| 免费欧美网站| 中文字幕一区二区精品| 国产黄色片免费看| 国产精品中文有码| 亚洲国产欧美一区二区三区不卡| 爱看av在线入口| 欧美精品v国产精品v日韩精品| aa片在线观看视频在线播放| 欧美精品黄色| 91免费看片在线| 国产免费av在线| 激情av一区二区| 日韩大尺度视频| 中文乱码免费一区二区三区下载| 国产成人一区二区三区小说| 亚洲av成人精品一区二区三区在线播放 | 91久久精品国产91性色tv| 在线观看一区二区三区四区| 亚洲精品99| 91精品国产综合久久久久久蜜臀 | 婷婷亚洲精品| 欧美激情中文网| 999久久久久久| 中文字幕欧美一| 中文字幕22页| 区一区二视频| 91精品国产综合久久久久久蜜臀| 最新国产在线观看| 精品视频一区 二区 三区| 91网站免费入口| 丝袜诱惑亚洲看片| 日本一区二区三区四区高清视频| f2c人成在线观看免费视频| 精品国精品国产| 欧美成人精品欧美一| 国产制服丝袜一区| 蜜桃视频一区二区在线观看| 久久久精品区| 久久国产加勒比精品无码| 99热这里只有精品5| 亚洲精选一二三| 亚洲精品无码一区二区| 国内揄拍国内精品久久| 国产精品久久九九| 在线观看特色大片免费视频| 亚洲人成网站色ww在线| 中日韩在线观看视频| 国产精品欧美一级免费| 免费网站在线观看黄| 欧美在线精品一区| 国产欧美一区二区三区另类精品| 蜜桃视频动漫在线播放| 亚洲免费视频一区二区| 中文字幕在线视频第一页| 成人免费一区二区三区视频| 香蕉网在线视频| 99在线|亚洲一区二区| 奇米精品在线| 亚洲高清影院| 高清亚洲成在人网站天堂| 日韩美女一级视频| 欧美日韩美女一区二区| 欧美日韩精品在线观看视频 | 丝袜美腿亚洲一区| 亚洲看片网站| 亚洲3区在线| 欧美亚洲在线播放| 尤物网在线观看| 欧美成人a∨高清免费观看| 综合激情网五月| 国产精品美女久久久久高潮| www.四虎在线| 日韩一区精品视频| 99re6这里有精品热视频| 小说区图片区色综合区| 国产日产欧美a一级在线| 里番在线播放| 国产一区二区三区精品久久久| 国产黄色一级大片| 在线一区二区观看| 欧美极品aaaaabbbbb| 国产亚洲精品7777| 中文字幕一区二区三区人妻在线视频 | www欧美日韩| 欧美一级免费片| 欧美色视频在线| 亚洲另类欧美日韩| 18成人在线观看| 中文幕无线码中文字蜜桃| 国产一区三区三区| 成人午夜激情av| 亚洲精品1区| 久久精品国产精品亚洲精品色| 亚洲福利天堂| 成人国产一区二区| 色综合视频一区二区三区44| 欧美中文字幕在线观看| 在线播放免费av| 综合欧美国产视频二区| 同心难改在线观看| 日韩欧美高清一区| 国产免费久久久| 欧美天天综合网| 欧美a视频在线观看| 亚洲不卡av一区二区三区| 午夜激情福利网| 国产精品视频第一区| 国产激情在线免费观看| 99久久伊人网影院| 国产人妻精品午夜福利免费| 免费久久精品视频| 国产免费毛卡片| 日韩视频一区| 国产美女网站在线观看| 欧美特黄a级高清免费大片a级| 亚洲乱码一区二区三区三上悠亚| 天天做夜夜做人人爱精品| 国产精品区免费视频| 超碰97久久| 福利视频久久| 国产美女撒尿一区二区| 91免费版黄色| 一区二区三区四区高清视频| 亚洲va欧美va国产综合久久| 亚洲精品自拍| 亚洲在线观看视频| 日韩高清二区| 91久久伊人青青碰碰婷婷| 欧洲精品99毛片免费高清观看| 成人精品一区二区三区电影黑人| 激情中国色综合| 国产精品视频白浆免费视频| 久久亚洲精品中文字幕| 成人精品视频99在线观看免费| 综合久久伊人| 91精品国产一区二区三区动漫| 视频在线亚洲| 国产精品视频一区二区三区经| 超碰cao国产精品一区二区| 99久久精品免费看国产四区| 91免费精品国偷自产在线在线| 国产精品国产精品国产专区不卡| 果冻天美麻豆一区二区国产| 国产自产在线视频一区| 小嫩嫩12欧美| 亚洲欧美日韩另类精品一区二区三区 | 日日摸日日碰夜夜爽无码| 国产模特精品视频久久久久| 日韩手机在线观看视频| 美女视频一区二区| 亚欧精品在线视频| 成人av网站在线| 波多野结衣片子| 亚洲视频中文字幕| 日产亚洲一区二区三区| 日韩欧美精品网址| 一本色道久久综合亚洲| 日韩视频一区二区在线观看| 亚洲色大成网站www| 在线观看日韩专区| 在线看一级片| 日本伊人精品一区二区三区介绍 | 亚洲性图自拍| 777午夜精品福利在线观看| 777午夜精品电影免费看| 亚洲一区二区三区乱码aⅴ| 免费福利视频一区| 亚洲国产一区二区三区在线| 女人天堂亚洲aⅴ在线观看| 毛片在线视频播放| 久久国产人妖系列| 免费的av网站| 136国产福利精品导航| 日韩欧美三级视频| 3d动漫精品啪啪| 午夜av免费观看| 久久精品亚洲国产| 成人片免费看| 99c视频在线| 精品国产一区二区三区噜噜噜| 国产精品啪啪啪视频| 日韩制服丝袜先锋影音| www.四虎精品| 国产精品美女www爽爽爽| 日韩久久精品视频| 69成人精品免费视频| 深夜视频在线免费| 欧美精品午夜视频| 99只有精品| 久久99热只有频精品91密拍| 亚洲国产精品综合久久久| 日本成人中文字幕在线| 成人激情小说乱人伦| 国产日产精品一区二区三区的介绍| 亚洲成精国产精品女| 国产男女猛烈无遮挡| 国产午夜精品一区二区三区| 国模私拍一区二区国模曼安| 亚洲一区二区久久久久久| 国产亚洲第一伦理第一区| 阿v天堂2018| 韩国一区二区三区| 国产精品久久免费观看| 欧美性xxxx18| 丰满人妻一区二区三区无码av| 日韩中文字幕久久| 日本黄色一区| 秋霞久久久久久一区二区| 一本一本久久| 完美搭档在线观看| 一区二区三区四区亚洲| 国产免费高清视频| 久久久精品影院| 日日夜夜精品| 亚洲午夜精品久久久中文影院av| 亚洲永久网站| av无码av天天av天天爽| 欧美日韩国产精品| 免费av网站观看| 久久久久久亚洲| 国产精品久久久久久久久久白浆| 黄色一级大片免费| 高清在线观看日韩| 久久成人在线观看| 欧美sm美女调教| 久久五月精品中文字幕| 成人资源av| 一区二区亚洲精品| 亚洲一区二区三区四区五区六区| 亚洲午夜一区二区| 免费a视频在线观看| 韩国19禁主播vip福利视频| 国产一区在线电影| 日韩精品xxxx| 久久精品亚洲精品国产欧美kt∨| 91丝袜一区二区三区| 亚洲色图狂野欧美| 日韩av一级| 性欧美18一19内谢| 国产一区二区调教| 久久久久久久国产精品毛片| 精品国产成人系列| 青青青免费在线视频| 日本视频一区二区不卡| 美女视频黄频大全不卡视频在线播放| 日本不卡一区视频| 欧美大肚乱孕交hd孕妇| 国产va在线视频| 免费试看一区| 久久99精品久久久久| 欧美卡一卡二卡三| 日韩国产精品亚洲а∨天堂免| 性欧美1819sex性高清| 一区二区三区av在线| 国产成人福利片| 91porny在线| 爱福利视频一区| 精品久久ai电影| 999精彩视频| 亚洲高清在线精品| 高清国产福利在线观看| 91视频国产精品| 亚洲综合精品| 韩国一级黄色录像| 亚洲国产精品电影| 99久久久国产精品免费调教网站| 福利在线小视频| 久久中文字幕电影| 国产精品久久久久久免费播放| 久久免费视频网站| 精品一区二区三区在线| 九色91porny| 日韩欧美精品免费在线| 图片区小说区亚洲| 亚洲精品9999| av一区二区不卡| 亚洲一级片免费看| 91福利视频网| 一区二区国产在线| 少妇无套高潮一二三区| 亚洲第一页在线| 先锋影音一区二区| 久久久久久久久久久久久国产精品 |