精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

免费中文字幕在线| 熟女少妇在线视频播放| 91福利在线观看视频| 午夜精品剧场| 精品中文字幕久久久久久| 国产一级不卡毛片| yellow91字幕网在线| 国产69精品久久久久毛片| 欧美在线xxx| 日本理论中文字幕| 国内自拍欧美| 欧美另类一区二区三区| 国产成人在线免费看| 黄色激情在线视频| 欧美 日韩 精品| 99久久婷婷这里只有精品| 日韩成人中文字幕在线观看| 色婷婷.com| 国产高清不卡| 亚洲一二三专区| 亚洲自拍的二区三区| 外国精品视频在线观看 | 91免费看片网站| 日本三级小视频| 伊人久久大香线蕉精品组织观看| 亚洲精选一区二区| 无码人妻aⅴ一区二区三区玉蒲团| 91精品xxx在线观看| 日韩精品欧美| 国产一区二区精品久久91| 国内精品久久久久影院 日本资源| 免费看黄色av| 噜噜噜天天躁狠狠躁夜夜精品| 欧美写真视频网站| 老熟妇仑乱视频一区二区| 日本片在线看| 亚洲免费大片在线观看| 一本久道久久综合狠狠爱亚洲精品| 完全免费av在线播放| 国产成人精品综合在线观看 | 成人av地址| 欧美一区二区三区色| 欧美伦理片在线观看| 另类专区亚洲| 日韩欧美在线播放| 久久视频这里有精品| 欧美xxxx性xxxxx高清| 精品国产第一国产综合精品| 成人av在线资源| 91青青草免费在线看| 97人人爽人人爽人人爽| 日韩av不卡在线观看| 热久久99这里有精品| av大全在线观看| 亚洲三级网站| 91精品国产91久久久久福利| 国产污片在线观看| 国产午夜久久| 日韩av手机在线看| 一级黄色av片| 青青草国产成人99久久| 国产欧亚日韩视频| 亚洲影视一区二区| 国产伦精品一区二区三区免费 | 日韩视频1区| 精品国产一区久久| 日韩av无码一区二区三区不卡| 国产精品视屏| 精品亚洲一区二区三区| 蜜桃av免费看| 97超碰人人干| 希岛爱理av免费一区二区| 亚洲欧美成人精品| 国产高清一区二区三区四区| 欧美大片aaaa| 九九视频这里只有精品| 久久午夜免费视频| 青椒成人免费视频| 亚洲一区中文字幕| 污视频在线免费| 国产欧美一区二区精品忘忧草| 一区二区三区免费看| 综合久久2019| 一本大道综合伊人精品热热| 亚洲 欧美 另类人妖| 超碰成人福利| 国产一区二区日韩| 久久久久久久久99| 日韩国产高清影视| 99久久久精品免费观看国产| 亚洲欧美日韩综合在线| 中文字幕在线一区免费| 国产美女在线一区| gay欧美网站| 色狼人综合干| 欧美色xxxx| 色18美女社区| 露出调教综合另类| 少妇高潮久久久久久潘金莲| 日本熟妇毛耸耸xxxxxx| 免费在线观看视频一区| 国产一区福利视频| 在线播放日本| 精品人伦一区二区三区蜜桃网站| 一女二男3p波多野结衣| 国产美女撒尿一区二区| 日韩视频免费看| 影音先锋亚洲天堂| 国产一区二区免费看| 欧美性bbwbbwbbwhd| 色呦呦久久久| 91.麻豆视频| 亚洲欧洲久久久| 狠狠入ady亚洲精品经典电影| 国产精品久久久久久久久借妻 | 欧美影院在线| 国产成人短视频在线观看| 欧美日韩精品系列| 欧美无人区码suv| 欧美一区二区三区久久精品茉莉花 | 极品粉嫩小仙女高潮喷水久久| 国产精品黑丝在线播放| 日韩av成人在线观看| 亚洲精品97久久中文字幕| 国产精品电影一区二区| 国产性xxxx18免费观看视频| 哺乳一区二区三区中文视频 | 狠狠狠色丁香婷婷综合久久五月| 老司机精品福利在线观看| 美女日批视频在线观看| 91麻豆精品国产91| 日韩精品一区二区三区在线视频| 首页国产欧美久久| 久久资源av| 末成年女av片一区二区下载| 精品乱人伦一区二区三区| 最新黄色av网址| 男人的天堂久久精品| 亚洲免费在线看| 神马欧美一区二区| 午夜av不卡| 日韩国产精品一区| 欧美另类一区二区| 91视频免费看| av动漫在线观看| 亚洲人成网www| 69视频在线播放| 深夜福利视频网站| 欧美日韩亚洲视频| 91久久免费视频| 老司机精品视频网站| 日韩在线电影一区| 国产精品videossex撒尿| 国产一区二区三区在线播放免费观看 | 国产精品一区二区小说| 成人高清电影网站| 国产欧亚日韩视频| 最新日本在线观看| 日韩精品在线网站| 国产午夜视频在线| av中文一区二区三区| 狠狠爱免费视频| 黄色av免费在线| 欧美丰满日韩| 国产精品久久中文| 伦xxxx在线| 日韩欧美123| 国产黄色片免费看| 久久久久久久av麻豆果冻| 亚洲精品怡红院| 图片区亚洲欧美小说区| 97人摸人人澡人人人超一碰| 岛国av在线播放| 亚洲视频在线观看| 91成品人影院| 亚洲第一搞黄网站| 国产特级黄色录像| 国产在线乱码一区二区三区| 欧美国产日韩激情| 国产一区网站| 亚洲影院在线看| 亚洲美女尤物影院| 中文字幕视频在线免费欧美日韩综合在线看 | 影音先锋黄色资源| 日韩电影在线一区| 亚洲天堂第一区| 久久av综合| 91精品黄色| 久久免费精彩视频| 精品一区二区三区中文字幕 | 久草视频在线资源站| 成人av网址在线观看| 熟妇人妻无乱码中文字幕真矢织江| 97在线精品| 久久国产精品精品国产色婷婷| julia一区二区三区中文字幕| 欧美高清视频免费观看| 嫩草精品影院| 欧美一级黄色片| 日本视频免费观看| 亚洲综合激情另类小说区| 国产 欧美 在线| 不卡av在线免费观看| 精品国产鲁一鲁一区二区三区| 99在线精品视频在线观看| 亚洲欧洲精品在线| 日韩欧美美女在线观看| 亚洲最大的av网站| 国产一区二区主播在线| 国内成人精品视频| 国产精品一区二区三区视频网站| 亚洲精品久久久久国产| a级片在线视频| 欧洲一区二区三区免费视频| www.亚洲成人| 一级黄色av片| 婷婷国产v国产偷v亚洲高清| 亚洲色偷偷综合亚洲av伊人| 久久久www成人免费无遮挡大片| 涩视频在线观看| 国产一区二区不卡| 天天干天天干天天干天天干天天干| 在线电影一区| 99久久久精品视频| 国产精品久久占久久| 日韩电影免费观看在| 群体交乱之放荡娇妻一区二区| 99热在线播放| 久久精品一级| 成人激情视频在线播放| 老司机精品视频网| 国产主播喷水一区二区| 韩日一区二区| 国产精品激情自拍| 成人欧美一区二区三区的电影| 91精品国产乱码久久久久久久久| 欧美大胆的人体xxxx| 欧美大片免费看| 蜜臀av在线| 欧美激情一二三| 日本精品600av| 欧美第一淫aaasss性| 69成人在线| 欧美黑人xxx| 欧美第一页浮力影院| 精品国产亚洲一区二区三区大结局 | 免费观看一级视频| 亚洲午夜av在线| 久热这里只有精品在线| 亚洲福利视频三区| 国产性xxxx高清| 欧美性xxxx极品hd满灌| 四虎影院在线免费播放| 在线免费观看视频一区| 国产精品露脸视频| 欧美日韩国产一区| 国产人妻精品一区二区三区| 欧美一区二区三区视频| 亚洲爱爱综合网| 亚洲精品乱码久久久久久金桔影视 | 国产欧美一区二区精品性色超碰 | 亚州av在线播放| 亚洲免费视频一区二区| 福利成人在线观看| 久久久成人精品视频| 懂色中文一区二区三区在线视频| 亚洲精品69| 国产 高清 精品 在线 a| 欧美成人专区| 视频一区三区| 欧美在线高清| 99热在线这里只有精品| 日韩高清电影一区| 色欲无码人妻久久精品| 成人av资源在线| 我不卡一区二区| 亚洲欧美日韩系列| 日本亚洲欧美在线| 欧美色网一区二区| 亚洲国产精品国自产拍久久| 国产视频久久久| 麻豆传媒视频在线| 久久久久久成人精品| 欧美大片免费高清观看| 亚洲xxxxx| 自拍偷拍一区| 97精品国产97久久久久久粉红| 国产日韩欧美高清免费| 日日干日日操日日射| 99久久精品99国产精品 | 日韩中文字幕综合| 一区二区三区亚洲| 国产美女福利在线| 国产999视频| 亚洲伊人影院| 天堂av一区二区| 国产性生活网站| 亚洲一卡二卡三卡四卡无卡久久| 丰满少妇xoxoxo视频| 日韩一区二区三区视频在线观看| 日本中文字幕电影在线观看| 久热爱精品视频线路一| 成人性生活视频| 99在线观看视频网站| 欧美日韩激情| 国模无码视频一区二区三区| 精品一区二区三区av| 夜夜春很很躁夜夜躁| 亚洲线精品一区二区三区| 一区二区三区午夜| 亚洲日本中文字幕免费在线不卡| 青青草原av在线| 成人精品在线视频| 欧美日韩中字| 日批视频在线免费看| 国产成人精品三级| 老熟妇高潮一区二区三区| 91国偷自产一区二区使用方法| 无码国产伦一区二区三区视频| 久久精品中文字幕一区| 亚洲国产尤物| 欧美婷婷久久| 久久国产欧美| 男男做爰猛烈叫床爽爽小说 | 一级黄色在线观看| 日韩大片免费观看视频播放| 日韩专区av| 日韩美女天天操| 五月天国产视频| 久久综合九色综合欧美就去吻| 欧美国产日韩综合| 91精品国产丝袜白色高跟鞋| 99免在线观看免费视频高清| 日本三级久久久| 希岛爱理av免费一区二区| 91免费黄视频| 不卡av在线网| 日韩污视频在线观看| 精品福利在线导航| h片视频在线观看| 国产精品一区二区三区在线| 欧美激情综合色综合啪啪| 日本亚洲一区二区三区| 亚洲精品国产一区二区三区四区在线| 国产精品第6页| 中文字幕在线观看亚洲| 老司机精品视频网| 国产手机视频在线观看| 国产一区二区成人久久免费影院 | 欧美视频在线免费看| 无码国产伦一区二区三区视频| 8x拔播拔播x8国产精品| 亚洲妇女av| 久久精品一区二| 欧美国产日本视频| 91成人一区二区三区| 欧美国产亚洲视频| 欧美激情99| 日av中文字幕| 国产精品伦理在线| a天堂在线观看视频| 91日韩在线专区| 国产精品久久久毛片| 国产精品久久免费看| 国产精品伊人久久| 欧美国产激情18| 神马午夜久久| 亚洲三级视频网站| 亚洲天堂精品在线观看| wwwav网站| 欧美一区二区.| 香蕉国产精品| 中文字幕人妻熟女在线| 色综合中文综合网| 麻豆视频网站在线观看| 成人欧美一区二区三区在线观看| 亚洲激情不卡| 人妻aⅴ无码一区二区三区| 欧美情侣在线播放| 99riav视频在线观看| 日韩欧美一区二区三区久久婷婷| 精品一区二区成人精品| 久久精品免费av| 在线播放日韩专区| 欧美视频三区| 苍井空浴缸大战猛男120分钟| 亚洲欧美一区二区不卡| 色婷婷av一区二区三| 国产精品亚发布| 亚洲国产欧美国产综合一区| 超碰人人干人人| 亚洲国产精品va| 激情久久一区二区| 国产特级黄色大片| 18欧美亚洲精品| 男人的天堂在线| 成人影片在线播放| 黑人精品欧美一区二区蜜桃| 91精品国产高清一区二区三密臀| 超碰91人人草人人干|