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

HarmonyOS基礎技術賦能之分布式數(shù)據(jù)服務功能

開發(fā) 前端 分布式 OpenHarmony
分布式數(shù)據(jù)服務(Distributed Data Service,DDS) 為應用程序提供不同設備間數(shù)據(jù)庫數(shù)據(jù)分布式的能力。通過調(diào)用分布式數(shù)據(jù)接口,應用程序?qū)?shù)據(jù)保存到分布式數(shù)據(jù)庫中。

[[419727]]

想了解更多內(nèi)容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區(qū)

https://harmonyos.51cto.com

引言

分布式數(shù)據(jù)服務(Distributed Data Service,DDS) 為應用程序提供不同設備間數(shù)據(jù)庫數(shù)據(jù)分布式的能力。通過調(diào)用分布式數(shù)據(jù)接口,應用程序?qū)?shù)據(jù)保存到分布式數(shù)據(jù)庫中。通過結合帳號、應用和數(shù)據(jù)庫三元組,分布式數(shù)據(jù)服務對屬于不同應用的數(shù)據(jù)進行隔離,保證不同應用之間的數(shù)據(jù)不能通過分布式數(shù)據(jù)服務互相訪問。在通過可信認證的設備間,分布式數(shù)據(jù)服務支持應用數(shù)據(jù)相互同步,為用戶提供在多種終端設備上最終一致的數(shù)據(jù)訪問體驗。

功能介紹

此次通過HarmonyOS的分布式數(shù)據(jù)服務能力,一方面可以實現(xiàn)自身應用界面的數(shù)據(jù)實時更新;另一方面也可以實現(xiàn)不同設備之間的數(shù)據(jù)實時更新。前提是在不同設備之間,要實現(xiàn)分布式數(shù)據(jù)服務的同步能力,需要同一個華為賬號登錄、并一個應用包名、同一個網(wǎng)絡之間進行,也可以兩個設備同時開啟藍牙。

開發(fā)指南

1. 在config.json中添加permisssion權限。

  1. // 添加在abilities同一目錄層級 
  2. "reqPermissions": [ 
  3.     { 
  4.         "name""ohos.permission.DISTRIBUTED_DATASYNC" 
  5.     } 

2. 在MainAbility中添加權限

  1. @Override 
  2. public void onStart(Intent intent) { 
  3.   super.onStart(intent); 
  4.   super.setMainRoute(MainAbilitySlice.class.getName()); 
  5.   //實現(xiàn)Ability的代碼中顯式聲明需要使用多設備協(xié)同訪問的權限 
  6.   requestPermissionsFromUser(new String[]{ 
  7.       "ohos.permission.DISTRIBUTED_DATASYNC"}, 0); 
  8.  

3. 根據(jù)配置構造分布式數(shù)據(jù)庫管理類實例KvManager以及創(chuàng)建分布式數(shù)據(jù)庫對象SingleKvStore。

  1. //實現(xiàn)數(shù)據(jù)庫的初始化 
  2. // 初入的參數(shù)context: Context context = getApplicationContext()獲得;storeId為分布式數(shù)據(jù)庫id,String類型,可自行定義,例如“testApp”。 
  3. public static SingleKvStore initOrGetDB(Context context, String storeId) { 
  4.   KvManagerConfig kvManagerConfig = new KvManagerConfig(context); 
  5.   kvManager = KvManagerFactory.getInstance().createKvManager(kvManagerConfig); 
  6.   Options options = new Options(); 
  7.   options.setCreateIfMissing(true
  8.     .setEncrypt(false
  9.     .setKvStoreType(KvStoreType.SINGLE_VERSION) //數(shù)據(jù)庫類型:單版本分布式數(shù)據(jù)庫 
  10.     .setAutoSync(true);//設置數(shù)據(jù)為自動同步 
  11.   singleKvStore = kvManager.getKvStore(options, storeId); 
  12.   return singleKvStore; 

4. 將數(shù)據(jù)寫入單版本分布式數(shù)據(jù)庫。

  1. //以key-value形式存儲到分布式數(shù)據(jù)庫 
  2. try { 
  3.   long id = System.currentTimeMillis(); 
  4.   singleKvStore.putString("key"
  5.       "{\"id\":" + id + 
  6.           ",\"temp\":" + temperature + 
  7.           ",\"humidity\":" + humidity + 
  8.           ",\"NH4\":" + 0.0 + 
  9.           ",\"H2S\":" + 0.0 + 
  10.           ",\"other\":" + gas + "}"); 
  11. } catch (KvStoreException e) { 
  12.   e.printStackTrace(); 

5.訂閱分布式數(shù)據(jù)變化。客戶端需要實現(xiàn)KvStoreObserver接口,監(jiān)聽數(shù)據(jù)變化。

  1. try { 
  2. //訂閱類型SubscribeType.SUBSCRIBE_TYPE_ALL意思可以同步到本機和其他外圍設備 
  3.   innerKvStoreObserver = new InnerKvStoreObserver(); 
  4.   singleKvStore.subscribe(SubscribeType.SUBSCRIBE_TYPE_ALL, innerKvStoreObserver); 
  5. } catch (KvStoreException e) { 
  6.   e.printStackTrace(); 
  7.  
  8. public class InnerKvStoreObserver implements KvStoreObserver { 
  9.  
  10.   @Override 
  11.   public void onChange(ChangeNotification changeNotification) { 
  12.     //刷新頁面上的數(shù)據(jù),同樣有一個坑,onChange方法實質(zhì)上,在一個子線程里執(zhí)行 
  13.     MainAbilitySlice.taskDispatcher.asyncDispatch(() -> { 
  14.       //在這里執(zhí)行頁面ui組件的顯示刷新 
  15.       flushUIData(); 
  16.     }); 
  17.   } 

6.獲取分布式數(shù)據(jù)庫數(shù)據(jù)

  1. private void flushUIData() { 
  2.   //查詢分布式數(shù)據(jù)的數(shù)據(jù),獲取數(shù)據(jù)可以通過get(String key)/ getEntries(String key)方法獲取數(shù)據(jù) 
  3.   List<Entry> entries = singleKvStore.getEntries(“key”); 
  4.   if (entries.size() > 0) { 
  5.     ZSONObject zsonObject = ZSONObject.stringToZSON(entries.get(0).getValue().getString()); 
  6.     int temp = zsonObject.getIntValue("temp"); 
  7.     int humidity = zsonObject.getIntValue("humidity"); 
  8.     int other = zsonObject.getIntValue("other"); 
  9.     tvTemp.setText(temp+"℃"); 
  10.     tvHumi.setText(humidity+"% RH"); 
  11.     tvGas.setText(other+"% LEL"); 
  12.   } 

7. 解除訂閱。一般在頁面銷毀時調(diào)用,也就是MainAbilitySlice的onStop()中調(diào)用

  1. if (singleKvStore != null) { 
  2.   singleKvStore.unSubscribe(innerKvStoreObserver); 

8. 同步數(shù)據(jù)到其他設備。獲取已連接的設備列表,選擇同步方式進行數(shù)據(jù)同步

  1. List<DeviceInfo> deviceInfoList = kvManager.getConnectedDevicesInfo(DeviceFilterStrategy.NO_FILTER); 
  2. List<String> deviceIdList = new ArrayList<>(); 
  3. for (DeviceInfo deviceInfo : deviceInfoList) { 
  4.     deviceIdList.add(deviceInfo.getId()); 
  5. singleKvStore.sync(deviceIdList, SyncMode.PUSH_ONLY); 

項目中采用在后臺service中開啟定時任務,實時保存數(shù)據(jù)到分布式數(shù)據(jù)庫,然后在主界面,監(jiān)聽數(shù)據(jù)變化,實時更新數(shù)據(jù)。

結果演示

1.剛開始安裝完成后效果:

HarmonyOS基礎技術賦能之分布式數(shù)據(jù)服務功能-鴻蒙HarmonyOS技術社區(qū)

2.每隔3秒,界面數(shù)據(jù)都會發(fā)生變化:

HarmonyOS基礎技術賦能之分布式數(shù)據(jù)服務功能-鴻蒙HarmonyOS技術社區(qū)
HarmonyOS基礎技術賦能之分布式數(shù)據(jù)服務功能-鴻蒙HarmonyOS技術社區(qū)

附上源碼:

1.MainAbilitySlice

  1. public class MainAbilitySlice extends AbilitySlice { 
  2.   private SingleKvStore singleKvStore; 
  3.   private Text tvTemp; 
  4.   private Text tvHumi; 
  5.   private Text tvGas; 
  6.   private Intent serviceIntent; 
  7.   private InnerKvStoreObserver innerKvStoreObserver; 
  8.  
  9.   @Override 
  10.   public void onStart(Intent intent) { 
  11.     super.onStart(intent); 
  12.     super.setUIContent(ResourceTable.Layout_ability_main); 
  13.     tvTemp=(Text)findComponentById(ResourceTable.Id_tvTemp); 
  14.     tvHumi=(Text)findComponentById(ResourceTable.Id_tvHumi); 
  15.     tvGas=(Text)findComponentById(ResourceTable.Id_tvGas); 
  16.     initService(); 
  17.  
  18.     try { 
  19.       //獲取數(shù)據(jù)庫 
  20.       singleKvStore = DBUtils.initOrGetDB(this, DBUtils.STORE_ID); 
  21.       innerKvStoreObserver = new InnerKvStoreObserver(); 
  22.       singleKvStore.subscribe(SubscribeType.SUBSCRIBE_TYPE_ALL, innerKvStoreObserver); 
  23.     } catch (KvStoreException e) { 
  24.       e.printStackTrace(); 
  25.     } 
  26.   } 
  27.  
  28.   public class InnerKvStoreObserver implements KvStoreObserver { 
  29.  
  30.     @Override 
  31.     public void onChange(ChangeNotification changeNotification) { 
  32.       //刷新頁面上的數(shù)據(jù),同樣有一個坑,onChange方法實質(zhì)上,在一個子線程里執(zhí)行 
  33.       getUITaskDispatcher().asyncDispatch(() -> { 
  34.         //在這里執(zhí)行頁面ui組件的顯示刷新 
  35.         flushUIData(); 
  36.       }); 
  37.     } 
  38.   } 
  39.  
  40.   private void flushUIData() { 
  41.     //查詢分布式數(shù)據(jù)的數(shù)據(jù) 
  42.     List<Entry> entries = singleKvStore.getEntries("key"); 
  43.     if (entries.size() > 0) { 
  44.       ZSONObject zsonObject = ZSONObject.stringToZSON(entries.get(0).getValue().getString()); 
  45.       int temp = zsonObject.getIntValue("temp"); 
  46.       int humidity = zsonObject.getIntValue("humidity"); 
  47.       int other = zsonObject.getIntValue("other"); 
  48.       tvTemp.setText(temp+"℃"); 
  49.       tvHumi.setText(humidity+"% RH"); 
  50.       tvGas.setText(other+"% LEL"); 
  51.     } 
  52.  
  53.  
  54.  
  55.   } 
  56.  
  57.   private void initService() { 
  58.     //啟動ServiceAbility 
  59.      serviceIntent = new Intent(); 
  60.     Operation operation = new Intent.OperationBuilder() 
  61.         .withDeviceId(""
  62.         .withBundleName("com.isoftstone.kvstoreapp"
  63.         .withAbilityName("com.isoftstone.kvstoreapp.ServiceAbility"
  64.         .build(); 
  65.     serviceIntent.setOperation(operation); 
  66.     startAbility(serviceIntent); 
  67.   } 
  68.  
  69.   @Override 
  70.   public void onActive() { 
  71.     super.onActive(); 
  72.   } 
  73.  
  74.   @Override 
  75.   public void onForeground(Intent intent) { 
  76.     super.onForeground(intent); 
  77.   } 
  78.  
  79.   @Override 
  80.   protected void onStop() { 
  81.     super.onStop(); 
  82.     //銷毀service 
  83.    stopAbility(serviceIntent); 
  84.    //刪除數(shù)據(jù)庫 
  85.    DBUtils.clearDB(); 
  86.     //解除訂閱 
  87.     if (singleKvStore != null) { 
  88.       singleKvStore.unSubscribe(innerKvStoreObserver); 
  89.     } 
  90.   } 

2.ServiceAbility

  1. public class ServiceAbility extends Ability { 
  2.  
  3.   private static final HiLogLabel LABEL_LOG = new HiLogLabel(3, 0xD001100, "Demo"); 
  4.   private SingleKvStore singleKvStore; 
  5.   private Timer timer; 
  6.   private MyTimerTask myTimerTask; 
  7.   private int temperature; 
  8.   private int humidity; 
  9.   private int gas; 
  10.  
  11.   @Override 
  12.   public void onStart(Intent intent) { 
  13.     super.onStart(intent); 
  14.     singleKvStore = DBUtils.initOrGetDB(this, DBUtils.STORE_ID); 
  15.     timer=new Timer(); 
  16.     myTimerTask=new MyTimerTask(); 
  17.     timer.schedule(myTimerTask,0,3000); 
  18.  
  19.   } 
  20.  
  21.   @Override 
  22.   public void onBackground() { 
  23.     super.onBackground(); 
  24.     HiLog.info(LABEL_LOG, "ServiceAbility::onBackground"); 
  25.   } 
  26.  
  27.   @Override 
  28.   public void onStop() { 
  29.     super.onStop(); 
  30.     if(myTimerTask!=null){ 
  31.       myTimerTask.cancel(); 
  32.     } 
  33.     if(timer!=null){ 
  34.       timer.cancel(); 
  35.     } 
  36.   } 
  37.  
  38.   @Override 
  39.   public void onCommand(Intent intent, boolean restart, int startId) { 
  40.   } 
  41.  
  42.   @Override 
  43.   public IRemoteObject onConnect(Intent intent) { 
  44.     return null
  45.   } 
  46.  
  47.   @Override 
  48.   public void onDisconnect(Intent intent) { 
  49.   } 
  50.  
  51.   private class MyTimerTask extends TimerTask{ 
  52.  
  53.     @Override 
  54.     public void run() { 
  55.       temperature++; 
  56.       humidity++; 
  57.       gas++; 
  58.       try { 
  59.         long id = System.currentTimeMillis(); 
  60.         singleKvStore.putString("key"
  61.             "{\"id\":" + id + 
  62.                 ",\"temp\":" + temperature + 
  63.                 ",\"humidity\":" + humidity + 
  64.                 ",\"NH4\":" + 0.0 + 
  65.                 ",\"H2S\":" + 0.0 + 
  66.                 ",\"other\":" + gas + "}"); 
  67.       } catch (KvStoreException e) { 
  68.         e.printStackTrace(); 
  69.       } 
  70.  
  71.     } 
  72.   } 

3.DBUtils

  1. public class DBUtils { 
  2.   //分布式數(shù)據(jù)庫storeId 
  3.   public static final String STORE_ID="kvStoreDB"
  4.   private static KvManager kvManager; 
  5.   private static SingleKvStore singleKvStore; 
  6.  
  7.  
  8.   //具體的實現(xiàn)數(shù)據(jù)庫的初始化 
  9.   public static SingleKvStore initOrGetDB(Context context, String storeId) { 
  10.  
  11.     KvManagerConfig kvManagerConfig = new KvManagerConfig(context); 
  12.     kvManager = KvManagerFactory.getInstance().createKvManager(kvManagerConfig); 
  13.     Options options = new Options(); 
  14.     options.setCreateIfMissing(true
  15.         .setEncrypt(false
  16.         .setKvStoreType(KvStoreType.SINGLE_VERSION) 
  17.         .setAutoSync(true);//設置數(shù)據(jù)為自動同步 
  18.     singleKvStore = kvManager.getKvStore(options, storeId); 
  19.     return singleKvStore; 
  20.   } 
  21.  
  22.   // 如果數(shù)據(jù)庫中的字段有修改,只能先關閉,后刪除,然后重新創(chuàng)建才生效 
  23.   public static void clearDB() { 
  24.     kvManager.closeKvStore(singleKvStore); 
  25.     kvManager.deleteKvStore(STORE_ID); 
  26.   } 
  27.  
  28.  

4. MainAbility

  1. public class MainAbility extends Ability { 
  2.  
  3.   @Override 
  4.   public void onStart(Intent intent) { 
  5.     super.onStart(intent); 
  6.     super.setMainRoute(MainAbilitySlice.class.getName()); 
  7.     //實現(xiàn)Ability的代碼中顯式聲明需要使用多設備協(xié)同訪問的權限 
  8.     requestPermissionsFromUser(new String[]{ 
  9.         "ohos.permission.DISTRIBUTED_DATASYNC"}, 0); 
  10.   } 

5. MyApplication

  1. public class MyApplication extends AbilityPackage { 
  2.  
  3.   @Override 
  4.   public void onInitialize() { 
  5.     super.onInitialize(); 
  6.   } 

6. config.json 文件

  1.   "app": { 
  2.     "bundleName""com.isoftstone.healthdata"
  3.     "vendor""isoftstone"
  4.     "version": { 
  5.       "code": 1000000, 
  6.       "name""1.0" 
  7.     }, 
  8.     "apiVersion": { 
  9.       "compatible": 4, 
  10.       "target": 5, 
  11.       "releaseType""Release" 
  12.     } 
  13.   }, 
  14.   "deviceConfig": {}, 
  15.   "module": { 
  16.     "package""com.isoftstone.kvstoreapp"
  17.     "name"".MyApplication"
  18.     "deviceType": [ 
  19.       "phone" 
  20.     ], 
  21.     "distro": { 
  22.       "deliveryWithInstall"true
  23.       "moduleName""entry"
  24.       "moduleType""entry" 
  25.     }, 
  26.     "reqPermissions": [ 
  27.       { 
  28.         "name""ohos.permission.DISTRIBUTED_DATASYNC" 
  29.       } 
  30.     ], 
  31.     "abilities": [ 
  32.       { 
  33.         "skills": [ 
  34.           { 
  35.             "entities": [ 
  36.               "entity.system.home" 
  37.             ], 
  38.             "actions": [ 
  39.               "action.system.home" 
  40.             ] 
  41.           } 
  42.         ], 
  43.         "orientation""unspecified"
  44.         "name""com.isoftstone.kvstoreapp.MainAbility"
  45.         "icon""$media:icon"
  46.         "description""$string:mainability_description"
  47.         "label""$string:app_name"
  48.         "type""page"
  49.         "launchType""standard" 
  50.       }, 
  51.       { 
  52.         "name""com.isoftstone.kvstoreapp.ServiceAbility"
  53.         "icon""$media:icon"
  54.         "description""$string:serviceability_description"
  55.         "type""service" 
  56.       } 
  57.     ] 
  58.   } 

7.xml布局文件

  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <DirectionalLayout 
  3.   xmlns:ohos="http://schemas.huawei.com/res/ohos" 
  4.   ohos:height="match_parent" 
  5.   ohos:orientation="vertical" 
  6.   ohos:width="match_parent"
  7.  
  8. <DirectionalLayout 
  9.   ohos:padding="20vp" 
  10.   ohos:height="match_content" 
  11.   ohos:width="match_parent" 
  12.   ohos:orientation="horizontal"
  13.   <Text 
  14.     ohos:width="match_content" 
  15.     ohos:height="match_content" 
  16.     ohos:text_size="20vp" 
  17.     ohos:text="溫度:"/> 
  18.   <Text 
  19.     ohos:id="$+id:tvTemp" 
  20.     ohos:width="0" 
  21.     ohos:height="match_content" 
  22.     ohos:text_size="22vp" 
  23.     ohos:text_color="#00ff00" 
  24.     ohos:text="待采集..." 
  25.     ohos:weight="1"/> 
  26. </DirectionalLayout> 
  27.   <DirectionalLayout 
  28.     ohos:height="1vp" 
  29.     ohos:width="match_parent" 
  30.     ohos:background_element="#cccccc"/> 
  31.  
  32.   <DirectionalLayout 
  33.     ohos:padding="20vp" 
  34.     ohos:height="match_content" 
  35.     ohos:width="match_parent" 
  36.     ohos:orientation="horizontal"
  37.     <Text 
  38.       ohos:width="match_content" 
  39.       ohos:height="match_content" 
  40.       ohos:text_size="20vp" 
  41.       ohos:text="濕度:"/> 
  42.     <Text 
  43.       ohos:id="$+id:tvHumi" 
  44.       ohos:width="0" 
  45.       ohos:height="match_content" 
  46.       ohos:text_size="22vp" 
  47.       ohos:text_color="#00ff00" 
  48.       ohos:text="待采集..." 
  49.       ohos:weight="1"/> 
  50.   </DirectionalLayout> 
  51.   <DirectionalLayout 
  52.     ohos:height="1vp" 
  53.     ohos:width="match_parent" 
  54.     ohos:background_element="#cccccc"/> 
  55.  
  56.  
  57.   <DirectionalLayout 
  58.     ohos:padding="20vp" 
  59.     ohos:height="match_content" 
  60.     ohos:width="match_parent" 
  61.     ohos:orientation="horizontal"
  62.     <Text 
  63.       ohos:width="match_content" 
  64.       ohos:height="match_content" 
  65.       ohos:text_size="20vp" 
  66.       ohos:text="可燃氣體:"/> 
  67.     <Text 
  68.       ohos:id="$+id:tvGas" 
  69.       ohos:width="0" 
  70.       ohos:height="match_content" 
  71.       ohos:text_size="22vp" 
  72.       ohos:text_color="#00ff00" 
  73.       ohos:text="待采集..." 
  74.       ohos:weight="1"/> 
  75.   </DirectionalLayout> 
  76.   <DirectionalLayout 
  77.     ohos:height="1vp" 
  78.     ohos:width="match_parent" 
  79.     ohos:background_element="#cccccc"/> 
  80.  
  81. </DirectionalLayout> 

想了解更多內(nèi)容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區(qū)

https://harmonyos.51cto.com

 

責任編輯:jianghua 來源: 鴻蒙社區(qū)
相關推薦

2020-11-06 12:12:35

HarmonyOS

2015-05-20 15:54:04

Openstack分布式存儲

2020-09-29 19:20:05

鴻蒙

2022-06-28 08:16:35

MySQL數(shù)據(jù)容災

2022-06-15 16:16:21

分布式數(shù)據(jù)庫鴻蒙

2024-01-08 08:05:08

分開部署數(shù)據(jù)體系系統(tǒng)拆分

2024-01-09 08:00:58

2023-02-11 00:04:17

分布式系統(tǒng)安全

2018-05-31 08:57:59

分布式塊存儲元數(shù)據(jù)

2021-08-26 08:03:30

大數(shù)據(jù)Zookeeper選舉

2021-09-07 10:43:25

EverDB分布式執(zhí)行

2019-10-10 09:16:34

Zookeeper架構分布式

2021-12-14 10:16:00

鴻蒙HarmonyOS應用

2022-04-08 07:22:15

分布式計數(shù)器系統(tǒng)設計

2022-09-25 22:19:24

Dapr分布式追蹤

2021-01-19 05:43:33

分布式2PC3PC

2023-02-23 07:55:41

2023-05-29 14:07:00

Zuul網(wǎng)關系統(tǒng)

2023-10-26 18:10:43

分布式并行技術系統(tǒng)

2023-12-08 07:31:19

服務網(wǎng)格協(xié)同分布式
點贊
收藏

51CTO技術棧公眾號

九九亚洲精品| 欧美日韩精品免费观看视完整| 国产a视频精品免费观看| 欧美夫妻性生活xx| 免费成人深夜夜行p站| 97精品国产99久久久久久免费| 亚洲视频在线一区二区| 国产精品久久波多野结衣| 男人天堂2024| 欧美高清日韩| 亚洲色图美腿丝袜| 中文字幕1区2区| 欧美色999| 艳妇臀荡乳欲伦亚洲一区| 乱一区二区三区在线播放| 一级特黄色大片| 亚洲一区二区动漫| 伦理中文字幕亚洲| 亚洲熟妇一区二区三区| 99久久久国产| 日本福利一区二区| 欧美这里只有精品| 国产爆初菊在线观看免费视频网站 | 亚洲精品在线观| 国产天堂在线播放| av蜜臀在线| 亚洲日本乱码在线观看| 日韩国产欧美精品| 天堂在线资源8| 国产美女久久久久| 国产精品男人的天堂| 日本一级黄色录像| 真实国产乱子伦精品一区二区三区| 国产午夜精品麻豆| 国产伦精品一区二区三区精品 | 91免费欧美精品| 香蕉污视频在线观看| 精品999网站| 欧美精品一区三区| 少妇高潮一区二区三区喷水| 九一国产精品| 亚洲精品网站在线播放gif| 四虎成人免费视频| 激情五月综合婷婷| 欧美巨大另类极品videosbest | 欧美一区二区三区四区夜夜大片| www.国产麻豆| 国产精品亚洲а∨天堂免在线| 国产精品免费久久久久久| 永久免费无码av网站在线观看| 亚洲激情专区| 国模gogo一区二区大胆私拍| 久久高清无码视频| 手机在线国产视频| 91精品国产高清一区二区三密臀| 中文字幕午夜精品一区二区三区| 日韩在线视频中文字幕| japanese中文字幕| 神马影视一区二区| 国产一区二区三区在线观看视频 | 天天爽天天狠久久久| 欧美孕妇性xxxⅹ精品hd| jiyouzz国产精品久久| www日韩av| 午夜精品久久久久久久99| 国产一区二区精品久久91| 国产欧美日韩视频| 国产精品久久婷婷| 免费高清在线观看免费| 久久r热视频| 91精品福利视频| 久久精品香蕉视频| 成人不卡视频| 欧美精品xxxxbbbb| 国产一区二区在线观看免费视频| 99亚洲男女激情在线观看| 91精品国产手机| 91精品国产高清91久久久久久| 亚洲精品a区| 亚洲精品99久久久久| 极品白嫩丰满美女无套| 国产亚洲一区二区三区不卡| 欲色天天网综合久久| 亚洲欧美精品久久| 欧美日本一区| 欧美中文在线字幕| 在线免费观看av片| 国产.欧美.日韩| 精品久久久久久综合日本| 精品视频二区| 亚洲天堂福利av| 五月丁香综合缴情六月小说| 伊人久久精品一区二区三区| 欧美视频完全免费看| 中文字幕在线观看日| 99热这里只有精品首页| 亚洲美女免费精品视频在线观看| 国产馆在线观看| 在线日本高清免费不卡| 国产精品久久久久久久久免费看| 国产熟女精品视频| 久久婷婷久久一区二区三区| 精品一区二区成人免费视频| 波多野结衣视频一区二区| 欧美三级日韩三级国产三级| 日本在线不卡一区二区| 成久久久网站| 国内精品久久久久久中文字幕| 在线观看日批视频| 91蜜桃传媒精品久久久一区二区| 一级黄色免费在线观看| 丝袜美腿一区| 亚洲精品在线一区二区| 91ts人妖另类精品系列| 久久久国产亚洲精品| 91香蕉视频在线下载| 成全电影播放在线观看国语| 午夜天堂影视香蕉久久| 国产成人在线综合| 禁断一区二区三区在线| 性视频1819p久久| 国产黄色av片| 日韩毛片一二三区| 亚欧在线免费观看| 蜜臀91精品国产高清在线观看| 欧美丰满片xxx777| 国产免费黄色片| 国产精品福利影院| 男人女人黄一级| 外国成人在线视频| 亚州国产精品久久久| www.香蕉视频| 亚洲精品乱码久久久久久 | 国产免费不卡| 亚洲精品不卡在线| 国产精品suv一区二区69| 国产精品中文有码| 正在播放一区| 亚洲伊人伊成久久人综合网| 最好看的2019年中文视频| 五月婷婷激情五月| 国产网红主播福利一区二区| 亚洲欧洲日产国码无码久久99| 激情av综合| 97激碰免费视频| 熟妇人妻一区二区三区四区 | 不卡伊人av在线播放| 在线观看中文字幕码| 国产精品你懂的在线欣赏| 欧美伦理片在线看| 日本一区二区高清不卡| 国产欧美精品一区二区三区介绍| 国产黄色在线| 欧美亚洲精品一区| 亚洲AV成人无码网站天堂久久| 免费在线视频一区| 一区二区高清视频| 精品一区二区三区四区五区| 欧美成人黄色小视频| xxxx国产精品| 无吗不卡中文字幕| 亚洲av无码国产精品久久| 久久只有精品| 色噜噜色狠狠狠狠狠综合色一 | 亚洲精品欧美极品| 日本色护士高潮视频在线观看| 欧美不卡一区二区三区四区| 国产主播在线观看| 91免费国产在线| youjizzxxxx18| 66视频精品| 国产乱码精品一区二区三区不卡| 蜜桃在线视频| 中文字幕亚洲欧美一区二区三区 | 日本中文在线播放| 国产喷白浆一区二区三区| 一区二区在线免费看| 欧美日韩视频| 欧美理论一区二区| 日韩在线激情| 久久久久久久久亚洲| 青青草免费在线| 欧美夫妻性生活| 日本五十熟hd丰满| 国产欧美一二三区| 男插女视频网站| 西西人体一区二区| 国产高清免费在线| 一区二区美女| 91精品在线一区| 中文字幕在线视频久| 日韩中文在线不卡| 日韩中文字幕免费观看| 欧美性三三影院| 久久久久久久久精| 中文字幕精品—区二区四季| 亚洲av午夜精品一区二区三区| 久久精品网址| 国产欧美123| 欧美一区二区性| 国产精品久久久久免费| 91大神在线观看线路一区| 欧美华人在线视频| 在线视频91p| 日韩久久午夜影院| 国产成人精品亚洲精品色欲| 91成人国产精品| 久久影院一区二区| 国产精品不卡视频| 日韩在线免费观看av| 国产成人精品一区二区三区网站观看| 无码人妻丰满熟妇区毛片18| 欧美一区网站| 在线不卡日本| 欧美猛男男男激情videos| 高清av免费一区中文字幕| 久久亚洲资源中文字| 国产97人人超碰caoprom| 牛牛精品在线| 久久久极品av| 免费在线毛片网站| 亚洲无线码在线一区观看| 日韩中文字幕影院| 欧美大胆人体bbbb| 国产免费无遮挡| 欧美在线啊v一区| 精品久久久久久久久久久国产字幕| 亚洲自拍偷拍图区| 免费毛片在线播放免费| 中文字幕五月欧美| 国产黄色录像视频| 国产亲近乱来精品视频| 少妇久久久久久久久久| 99视频精品全部免费在线| 四虎永久免费观看| 国产精品亚洲视频| 能看毛片的网站| 国产精品一区免费在线观看| 网站在线你懂的| 精品一区二区三区久久| 777一区二区| 久久精品国产精品亚洲精品| 高清一区二区视频| 日本成人在线视频网站| 91香蕉视频导航| 日韩国产在线一| 精品日韩久久久| 日本vs亚洲vs韩国一区三区| 久久久久国产一区| 蓝色福利精品导航| 涩涩网站在线看| 国产一区二区三区日韩| 久久艹这里只有精品| 国产美女久久久久| 在线精品视频播放| 99久久777色| 黑人巨大精品欧美| 国产欧美一区二区三区网站| 成年人在线免费看片| 综合自拍亚洲综合图不卡区| 久久中文免费视频| 亚洲午夜三级在线| youjizz在线视频| 欧美少妇性性性| 精品区在线观看| 亚洲第一视频网| 日本免费不卡| 中文字幕在线日韩| 成a人片在线观看| 国内精品久久久久影院优| 在线看片福利| 国产啪精品视频| 一区二区视频| 欧美视频1区| 99久久精品费精品国产风间由美| 九九久久九九久久| 国产精品视频| 亚洲欧美视频二区| 国产成人综合在线| 97超碰在线资源| 亚洲欧美一区二区在线观看| 国产亚洲精品女人久久久久久| 精品久久久久久国产| 伊人久久成人网| 欧美mv和日韩mv国产网站| 久草福利在线| 久久成人精品电影| 国产精品伦理| 99热在线国产| 国产aⅴ精品一区二区三区久久| 一区二区三区四区五区精品| 国产精品激情电影| 在线看的黄色网址| 成人小视频免费在线观看| 久久久视频6r| 亚洲成人资源在线| 中文字幕资源网| 亚洲激情视频在线播放| 国产视频一区二区| 欧美最猛性xxxxx免费| 美女精品视频在线| 日韩亚洲视频| 亚洲三级视频| 亚洲成人手机在线观看| 久久午夜免费电影| 国产无码精品久久久| 欧美日韩亚洲丝袜制服| 四虎影院在线域名免费观看| 久久综合亚洲社区| 51一区二区三区| 精品无人乱码一区二区三区的优势| 欧美激情欧美| chinese少妇国语对白| 成人黄色大片在线观看| 欧美肥妇bbwbbw| 精品视频在线视频| 欧美成人免费| 91av在线免费观看视频| 美女精品久久| 激情五月五月婷婷| 美日韩一级片在线观看| 国产精品815.cc红桃| 精品国产户外野外| 亚洲免费一级片| 九九热精品视频在线播放| 欧美日韩免费电影| 日本一区二区三区视频在线播放| 亚洲激情在线| 亚洲の无码国产の无码步美| 一区二区三区波多野结衣在线观看 | 日韩欧美精品中文字幕| 秋霞网一区二区| 久久久久久国产精品久久| 欧美第一在线视频| 三级网在线观看| 国内成+人亚洲+欧美+综合在线| 天天干天天操天天拍| 欧美在线观看禁18| 91在线网址| 国产一区二区在线免费| 成人羞羞视频在线看网址| 亚洲天堂av线| 国产精品久久久久影院色老大 | 久久网免费视频| 日韩欧美视频在线| 蜜桃成人365av| 国产精华一区二区三区| 亚洲国产激情| 一女三黑人理论片在线| 欧美日韩亚洲91| 黄色视屏网站在线免费观看| 国产成人久久精品| 日韩精品久久| 中文字幕一区久久| 亚洲女同一区二区| 亚洲男女视频在线观看| 久久露脸国产精品| 亚洲丝袜美腿一区| 黄色一级大片在线观看| 欧美激情综合在线| ,一级淫片a看免费| 欧美激情国产日韩精品一区18| 亚洲乱码一区| 黄色av网址在线播放| 久久久久国色av免费看影院| 最近中文在线观看| 久久久久999| 风间由美性色一区二区三区四区| 成人在线观看你懂的| 久久久精品tv| 国产精品女同一区二区| 欧美日韩999| 亚洲香蕉视频| 日本黄色福利视频| 亚洲国产精品人人做人人爽| 嫩草在线播放| 成人网在线视频| 国产欧美成人| 午夜精品久久久久99蜜桃最新版 | 亚洲熟妇一区二区| 欧美日韩激情美女| 日本视频在线观看| 国产精品久久久久久久久婷婷| 国产日韩1区| 婷婷激情四射网| 亚洲国产一区二区三区在线观看| 日韩一区二区三区免费视频| 7777在线视频| 2023国产精品自拍| 国产99999| 国产成人a亚洲精品| 午夜久久免费观看| 中文字幕在线免费看线人| 欧美老年两性高潮| av日韩亚洲| 黑人巨茎大战欧美白妇| 国产日本亚洲高清| 女人18毛片水真多18精品| 国产精品专区一| 国产精品久久国产愉拍|