日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android Jetpack组件之数据库Room详解(三)

發布時間:2024/4/14 Android 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android Jetpack组件之数据库Room详解(三) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文涉及Library的版本如下:

  • androidx.room:room-runtime:2.1.0-alpha03
  • androidx.room:room-compiler:2.1.0-alpha03(注解編譯器)

Room對LiveData擴展

下面先列一個room中使用livedata的例子:

@Dao public interface UserDao {@Query("SELECT * FROM user")LiveData<List<User>> getUsersLiveData(); } public class RoomActivity extends AppCompatActivity {protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);mRoomModel = ViewModelProviders.of(this).get(RoomModel.class);mRoomModel.getUsersLiveData().observe(this, new Observer<List<User>>() {@Overridepublic void onChanged(List<User> users) {adapter.setData(users); // 數據回調,這里只要數據庫User有數據變化,每次都會回調}});} } public class RoomModel extends AndroidViewModel {private final AppDatabase mAppDatabase; //AppDatabase是繼承RoomDatabase的抽象類public RoomModel(@NonNull Application application) {super(application);mAppDatabase = AppDatabase.getInstance(this.getApplication());}public LiveData<List<User>> getUsersLiveData() {return mAppDatabase.userDao().getUsersLiveData();} } 復制代碼

只要數據庫的數據有變化, 上面代碼中onChanged就會回調,但是, 不是什么時候都回調,當activity處理onstop是不會回調,但是activity重新走onstart后,數據庫有增刪改還是會回調的。這里的效果有點類似安卓里的Loader, 使用過Loader的都知道,Loader是會監聽contentprovier的一條uri, 有數據變更, 處于onstart狀態的activity,Loader會重新加載一個數據。接下來看一下Room是怎么監聽數據庫變化的。

UserDao_Impl.getUsersLiveData方法代碼如下:

@Overridepublic LiveData<List<User>> getUsersLiveData() {final String _sql = "SELECT * FROM user";//通過sql創建SQLite查詢執行程序final RoomSQLiteQuery _statement = RoomSQLiteQuery.acquire(_sql, 0);//__db.getInvalidationTracker()返回是InvalidationTracker類,是RoomDatabase的一個成員變量//調用InvalidationTracker.createLiveData方法創建LiveData對象return __db.getInvalidationTracker().createLiveData(new String[]{"user"}, new Callable<List<User>>() {@Overridepublic List<User> call() throws Exception {//下面代碼不多說,執行sql語句,組裝成List<User>返回final Cursor _cursor = DBUtil.query(__db, _statement, false);try {final int _cursorIndexOfFirstName = CursorUtil.getColumnIndexOrThrow(_cursor, "first_name");final int _cursorIndexOfName = CursorUtil.getColumnIndexOrThrow(_cursor, "name");final int _cursorIndexOfId = CursorUtil.getColumnIndexOrThrow(_cursor, "id");final List<User> _result = new ArrayList<User>(_cursor.getCount());while(_cursor.moveToNext()) {final User _item;_item = new User();_item.firstName = _cursor.getString(_cursorIndexOfFirstName);_item.name = _cursor.getString(_cursorIndexOfName);_item.id = _cursor.getInt(_cursorIndexOfId);_result.add(_item);}return _result;} finally {_cursor.close();}}@Overrideprotected void finalize() {_statement.release();}});} 復制代碼

從上面的代碼可以看出監聽數據庫變化核心類是InvalidationTracker,InvalidationTracker類是RoomDatabase的構造器創建的, RoomDatabase中的createInvalidationTracker方法是抽象類,是由開發者繼承RoomDatabase,最終createInvalidationTracker實現是apt編譯時期自動生成的類實現的, 接著看代碼:

//本文createInvalidationTracker()的真正實現是AppDatabase_Impl類,不了解的可以看一下上一篇文章@Overrideprotected InvalidationTracker createInvalidationTracker() {final HashMap<String, String> _shadowTablesMap = new HashMap<String, String>(0);HashMap<String, Set<String>> _viewTables = new HashMap<String, Set<String>>(0);//User, Favorite是表名return new InvalidationTracker(this, _shadowTablesMap, _viewTables, "User","Favorite");}//InvalidationTracker的構造器 public InvalidationTracker(RoomDatabase database, Map<String, String> shadowTablesMap,Map<String, Set<String>> viewTables, String... tableNames) {mDatabase = database;//看名字ObservedTableTracker是一個觀察表的跟蹤者, 先跳過mObservedTableTracker = new ObservedTableTracker(tableNames.length);//一個Map, Key是表名,Value是表idmTableIdLookup = new ArrayMap<>();mShadowTableLookup = new SparseArrayCompat<>(shadowTablesMap.size());mViewTables = viewTables;//看名字是一個失效LiveData容器,先跳過mInvalidationLiveDataContainer = new InvalidationLiveDataContainer(mDatabase);final int size = tableNames.length;mTableNames = new String[size];// 遍歷數據表個數for (int id = 0; id < size; id++) { final String tableName = tableNames[id].toLowerCase(Locale.US);/Key是表名,并且轉成全小寫,Value是表id, id是數據表數組里的indexmTableIdLookup.put(tableName, id);mTableNames[id] = tableName;String shadowTableName = shadowTablesMap.get(tableNames[id]);if (shadowTableName != null) {mShadowTableLookup.append(id, shadowTableName.toLowerCase(Locale.US));}}//一個set, 存儲booleanmTableInvalidStatus = new BitSet(tableNames.length); }//InvalidationTracker的internalInit方法 //該方法會在數據庫打開的時候調用, 是在SQLiteOpenHelper.onOpen方法時調用 void internalInit(SupportSQLiteDatabase database) {synchronized (this) {if (mInitialized) {Log.e(Room.LOG_TAG, "Invalidation tracker is initialized twice :/.");return;}database.beginTransaction();try {//PRAGMA是一個特殊命令,通常用于改變數據庫的設置//臨時存儲設置為內存模式database.execSQL("PRAGMA temp_store = MEMORY;");//啟用遞歸觸發器database.execSQL("PRAGMA recursive_triggers='ON';");//CREATE_TRACKING_TABLE_SQL是個sql語句字符串, 語句如下://CREATE TEMP TABLE room_table_modification_log (table_id INTEGER PRIMARY //KEY, invalidated INTEGER NOT NULL DEFAULT 0 )//創建一個臨時表room_table_modification_logdatabase.execSQL(CREATE_TRACKING_TABLE_SQL);database.setTransactionSuccessful();} finally {database.endTransaction();}//同步數據庫觸發器syncTriggers(database);mCleanupStatement = database.compileStatement(RESET_UPDATED_TABLES_SQL);mInitialized = true; // 初始化的標志,只初始化一次}} 復制代碼

從上面的代碼可以知道當數據打開是調用internalInit方法,執行sql語句把臨時存儲設置為內存模式, 創建了一個名叫room_table_modification_log的臨時表,臨時表使用CREATE TEMP TABLE 語句創建的,臨時表不會持久化,數據庫關閉就不存在啦。這個臨時表只有兩個字段,分別是table_id和invalidated(是否無效的標志)。接著看syncTriggers方法

void syncTriggers(SupportSQLiteDatabase database) {while (true) {Lock closeLock = mDatabase.getCloseLock();closeLock.lock();try {//tablesToSync存儲了表相應觸發器的狀態final int[] tablesToSync = mObservedTableTracker.getTablesToSync();// 首次初始化tablesToSync為null, 當mObservedTableTracker觀察一個表時就不為nullif (tablesToSync == null) { return;}final int limit = tablesToSync.length;database.beginTransaction();try {for (int tableId = 0; tableId < limit; tableId++) {switch (tablesToSync[tableId]) {case ObservedTableTracker.ADD://開始跟蹤表startTrackingTable(database, tableId);break;case ObservedTableTracker.REMOVE://停止跟蹤表stopTrackingTable(database, tableId);break;}}database.setTransactionSuccessful();} finally {database.endTransaction();}mObservedTableTracker.onSyncCompleted();} finally {closeLock.unlock();}} }//開始跟蹤表 private void startTrackingTable(SupportSQLiteDatabase writableDb, int tableId) {//給臨時表room_table_modification_log插入數據,(tableId, 0)writableDb.execSQL("INSERT OR IGNORE INTO " + UPDATE_TABLE_NAME + " VALUES(" + tableId + ", 0)");final String tableName = mShadowTableLookup.get(tableId, mTableNames[tableId]);StringBuilder stringBuilder = new StringBuilder();//TRIGGERS是一個字符串數組,分別是UPDATE、DELETE、INSERT//遍歷TRIGGERS,分別為該表創建3個觸發器,分別是更新觸發器、刪除觸發器、插入觸發器for (String trigger : TRIGGERS) {stringBuilder.setLength(0);stringBuilder.append("CREATE TEMP TRIGGER IF NOT EXISTS ");appendTriggerName(stringBuilder, tableName, trigger);stringBuilder.append(" AFTER ").append(trigger).append(" ON `").append(tableName).append("` BEGIN UPDATE ").append(UPDATE_TABLE_NAME).append(" SET ").append(INVALIDATED_COLUMN_NAME).append(" = 1").append(" WHERE ").append(TABLE_ID_COLUMN_NAME).append(" = ").append(tableId).append(" AND ").append(INVALIDATED_COLUMN_NAME).append(" = 0").append("; END");writableDb.execSQL(stringBuilder.toString());}} 復制代碼

startTrackingTable方法為一個表創建3個觸發器,分別是更新觸發器、刪除觸發器、插入觸發器。對應stopTrackingTablefang方法就是刪除觸發器,對sqlite觸發器本文不詳細說明,結合上面代碼,以更新觸發器為例,簡單介紹一下:

//結合上面代碼, 創建更新觸發器的sql如下: CREATE TEMP TRIGGER IF NOT EXISTS room_table_modification_trigger_表名_類型 AFTER UPDATE ON 表名 BEGIN UPDATE room_table_modification_log SET invalidated = 1 WHERE table_id = ${tableId} AND invalidated = 0; END 復制代碼

上面sql語句中room_table_modification_trigger 加表名加類型是觸發器名字, "AFTER UPDATE ON 表名"意思是當某個表更新數據后觸發, 語句中 BEGIN 與 END之間語句是表更新后執行什么操作。細看BEGIN 與 END之間語句很好理解,根據tableId把臨時room_table_modification_log表的invalidated由0改1。所以當某個表數據有更新、刪除、插入操作時,利用觸發器去修改一個臨時日志表的一個值說明是該表的數據有改變,然后去監聽這個表臨時的表invalidated這個值就可以知道哪個表數據改變啦, 不多說接著看一下源碼怎么監聽臨時表的。

//InvalidationTracker的refreshVersionsSync方法 public void refreshVersionsAsync() {// TODO we should consider doing this sync instead of async.if (mPendingRefresh.compareAndSet(false, true)) {//異步執行一個RunnablemDatabase.getQueryExecutor().execute(mRefreshRunnable);} }Runnable mRefreshRunnable = new Runnable() {@Overridepublic void run() {...//省略了一些細節代碼//checkUpdatedTable方法,檢查表有沒有數據變化hasUpdatedTable = checkUpdatedTable();if (hasUpdatedTable) {synchronized (mObserverMap) {//有變化就遍歷ObserverWrapper觀察者for (Map.Entry<Observer, ObserverWrapper> entry : mObserverMap) {entry.getValue().notifyByTableVersions(mTableInvalidStatus);}}}}private boolean checkUpdatedTable() {boolean hasUpdatedTable = false;//執行一個sql語句, 這個語句是://SELECT * FROM room_table_modification_log WHERE invalidated = 1//查詢有變化的數據Cursor cursor = mDatabase.query(new SimpleSQLiteQuery(SELECT_UPDATED_TABLES_SQL));try {while (cursor.moveToNext()) {final int tableId = cursor.getInt(0);mTableInvalidStatus.set(tableId);//一個標志,hasUpdatedTable=true,表有增刪改的變化hasUpdatedTable = true;}} finally {cursor.close();}if (hasUpdatedTable) {//mCleanupStatement在internalInit方法里初始化, mCleanupStatement是SupportSQLiteStatement對于,調用executeUpdateDelete()執行一個語句, 語句如下://UPDATE room_table_modification_log SET invalidated = 0 //WHERE invalidated = 1//從sql語句來看,是還原invalidated,還原臨時表的狀態mCleanupStatement.executeUpdateDelete();}return hasUpdatedTable;}} 復制代碼

經過上面源碼,思路已經比較清晰啦,利用觸發器監聽某個表的更新、刪除、插入, 監聽到日志記錄在一個臨時日志表里,然后再去不停地監聽臨時日志表就可以知道某個表數據是否改變啦。InvalidationTracker的refreshVersionsSync方法就是監聽臨時日志表的方法,這個方法調用時機是在RoomDatabase.endTransaction方法里,為什么要放事務結束的方法里呢?再簡單仔細看了一源碼,發現Room的所有增刪改的操作都是通過開啟事務來執行的。 回頭看一下LiveData的創建過程。

//UserDao_Impl.getUsersLiveData方法 @Overridepublic LiveData<List<User>> getUsersLiveData() {...//調用InvalidationTracker.createLiveData方法創建LiveDatareturn __db.getInvalidationTracker().createLiveData(new String[]{"user"}, new Callable<List<User>>() {@Overridepublic List<User> call() throws Exception {....//省略這代碼,這里方法邏輯,執行sql語句查詢,組裝成List<User>返回}});}//InvalidationTracker.createLiveData方法會調用InvalidationLiveDataContainer.create <T> LiveData<T> create(String[] tableNames, Callable<T> computeFunction) {//computeFunction是Callable接口回調, tableNames是表名, RoomTrackingLiveData繼承LiveDatareturn new RoomTrackingLiveData<>(mDatabase, this, computeFunction, tableNames); }//RoomTrackingLiveData類 class RoomTrackingLiveData<T> extends LiveData<T> {//RoomTrackingLiveData構造器RoomTrackingLiveData(RoomDatabase database,InvalidationLiveDataContainer container,Callable<T> computeFunction,String[] tableNames) {mDatabase = database;mComputeFunction = computeFunction;mContainer = container;//初始化一個InvalidationTracker的觀察者mObserver = new InvalidationTracker.Observer(tableNames) {@Overridepublic void onInvalidated(@NonNull Set<String> tables) {//主線程執行一個Runnable, onInvalidated方法在某個表數據有變化是會觸發ArchTaskExecutor.getInstance().executeOnMainThread(mInvalidationRunnable);}};}//onActive方法繼承LiveData, 當activity或者fragment出入onstart會被觸發一次,//關于LiveData的不細說,可以看之前的文章@Overrideprotected void onActive() {super.onActive();mContainer.onActive(this);//異步執行mRefreshRunnablemDatabase.getQueryExecutor().execute(mRefreshRunnable);} } //RoomTrackingLiveData的mRefreshRunnable和mInvalidationRunnablefinal Runnable mRefreshRunnable = new Runnable() {@WorkerThread@Overridepublic void run() {if (mRegisteredObserver.compareAndSet(false, true)) {//添加一個觀察者, 為什么需要添加一個觀察者,等會解析,先往下看mDatabase.getInvalidationTracker().addWeakObserver(mObserver);}boolean computed;//do 循環do {computed = false;//mComputing是原子鎖,保證多個線程執行時,只能一個線程執行循環if (mComputing.compareAndSet(false, true)) {//mComputing初始值是false, 一次能進來try {T value = null;//mInvalid是原子鎖, 初始值是truewhile (mInvalid.compareAndSet(true, false)) {computed = true;try {//執行Callable接口, 這里例子就是執行sql語句查詢Uservalue = mComputeFunction.call();} catch (Exception e) {}}if (computed) {//執行完查詢語句,通知livedata的觀察者,會把value轉回主線程//看回本文的開頭,會觸發onChanged(value),通知ui刷新postValue(value);}} finally {// 釋放鎖mComputing.set(false);}}} while (computed && mInvalid.get());}};final Runnable mInvalidationRunnable = new Runnable() {@MainThread@Overridepublic void run() {boolean isActive = hasActiveObservers();// mInvalid是原子鎖if (mInvalid.compareAndSet(false, true)) {if (isActive) {//異步執行mRefreshRunnablemDatabase.getQueryExecutor().execute(mRefreshRunnable);}}}}; 復制代碼

mInvalidationRunnable 在某個表數據有變化是會觸發執行,而mInvalidationRunnable的實現又是添加一個mRefreshRunnable異步執行, 而mInvalid這個原子鎖, 鎖得是mComputeFunction.call(), 保證多線程下查詢只能執行一個。 上面代碼 mDatabase.getInvalidationTracker().addWeakObserver(mObserver)還沒解答,繼續看InvalidationTracker.addWeakObserver方法。

public void addWeakObserver(Observer observer) {//WeakObserver是對observer一個wrapper,作用是防止內存泄露, //WeakObserver的寫法不錯,又學到啦, 里面是一個弱引的observeraddObserver(new WeakObserver(this, observer)); }public void addObserver(@NonNull Observer observer) {final String[] tableNames = resolveViews(observer.mTables);int[] tableIds = new int[tableNames.length];final int size = tableNames.length;for (int i = 0; i < size; i++) {Integer tableId = mTableIdLookup.get(tableNames[i].toLowerCase(Locale.US));if (tableId == null) {throw new IllegalArgumentException("There is no table with name " + tableNames[i]);}tableIds[i] = tableId;}//tableIds數組存儲了所有表id//ObserverWrapper是對observer進行包裝ObserverWrapper wrapper = new ObserverWrapper(observer, tableIds, tableNames);ObserverWrapper currentObserver;synchronized (mObserverMap) {//mObserverMap是一個hashMap, observer為key,putIfAbsent方法,如果key不存在//就返回null, 如果key已經存在,就會返回前一個valuecurrentObserver = mObserverMap.putIfAbsent(observer, wrapper);}if (currentObserver == null && mObservedTableTracker.onAdded(tableIds)) {//syncTriggers這個方法本文前面分析過了,創建數據庫監聽觸發器,//syncTriggers在InvalidationTracker初始化調用過,但是初始化時, mObservedTableTracker里沒有表id,要等mObservedTableTracker.onAdded調用后,才真正能創建觸發器監聽表syncTriggers();} } 復制代碼

LiveData在Room的實現整個流程分析結束。來總結一下

總結

利用觸發器監聽某個表的更新、刪除、插入, 監聽到日志記錄在一個臨時日志表里,然后在增刪改操作后去查詢臨時日志表,查某個表數據有改變后,去通知Livedata重新執行Callable.call方法,然后重新查詢數據庫,最后通知UI更新數據。

Room還有許多額外功能還可以學習:

  • Room還支持多個進程監聽表變更,具體可以細看MultiInstanceInvalidationClient, MultiInstanceInvalidationClient會涉及到一些aidl等
  • Room在建表時還有很多其他注解在某些場景用,還有數據庫視圖等, 例如@Embedded, @DatabaseView @ForeignKey等
  • 數據索引的創建, 子查詢等。

轉載于:https://juejin.im/post/5cb5534df265da039a3d64b6

總結

以上是生活随笔為你收集整理的Android Jetpack组件之数据库Room详解(三)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

国产福利不卡视频 | 在线亚洲观看 | 中日韩男男gay无套 日韩精品一区二区三区高清免费 | 国内精品久久久久久久久久 | 日韩精品欧美专区 | 久久精品视频免费 | 精品麻豆| 国产经典三级 | 超碰在线成人 | 久久视精品 | 99色资源| 色综合国产 | 二区三区中文字幕 | 天堂av免费| 国产精品一区二区三区在线免费观看 | 欧美综合国产 | 久久人人爽人人爽 | 激情五月伊人 | 丁香六月综合网 | 天天爽天天爽天天爽 | 国产色啪 | 国产一区二区网址 | 九九色在线| 91成人精品一区在线播放69 | 麻豆传媒视频在线免费观看 | 黄网站免费久久 | 亚洲夜夜网 | 久草视频中文在线 | 国产亚洲综合性久久久影院 | 欧美日本国产在线观看 | 国产精品99免视看9 国产精品毛片一区视频 | 草久久久久久 | 亚洲精品综合一二三区在线观看 | 国产福利在线免费 | 免费精品在线 | 日韩欧美国产精品 | 成人va视频 | 亚洲免费在线观看视频 | 亚洲日本va在线观看 | 在线国产片 | 国产精品久久久久影视 | 久久国产免 | 99久久99热这里只有精品 | 青青河边草免费观看完整版高清 | 天天添夜夜操 | 日韩字幕| 亚洲区视频在线 | 国产91影院| 国产精品一区二区三区在线免费观看 | 国产一级免费电影 | 日韩网站在线看片你懂的 | 波多野结衣一区三区 | 草久久久 | 一区二区三区日韩精品 | 国精产品满18岁在线 | 日韩色爱| 色视频在线观看免费 | 天天草天天色 | 人人爽人人做 | 国产原创在线视频 | 91免费观看国产 | 日韩视频在线观看视频 | 欧美亚洲国产精品久久高清浪潮 | 中文字幕久久精品亚洲乱码 | 网站免费黄 | 久久99精品国产麻豆宅宅 | 亚洲黄色av网址 | 91视频在线免费观看 | 手机看片午夜 | 色婷婷88av视频一二三区 | 99热在线这里只有精品 | 91久久国产精品 | 久久久久在线观看 | 国产一区在线视频观看 | 国产一区在线观看视频 | 4438全国亚洲精品观看视频 | 精品福利视频在线 | 日韩欧美精选 | 午夜精品电影一区二区在线 | 91精品办公室少妇高潮对白 | 在线观看一区视频 | 97精品国产 | 亚一亚二国产专区 | 干干日日 | 日本护士三级少妇三级999 | 黄色大片日本 | 91.精品高清在线观看 | 国产成人亚洲精品自产在线 | 亚洲欧美激情精品一区二区 | 国产精品video爽爽爽爽 | 精品久久久久久亚洲综合网站 | 97网| 成人啊 v| 狠狠色噜噜狠狠狠狠2021天天 | 精品视频久久久久久 | 精品美女在线视频 | 亚洲精品91天天久久人人 | 丝袜美女视频网站 | 五月婷婷免费 | 国产亚洲日本 | 黄色小说在线免费观看 | 超碰在线网| 夜夜爽88888免费视频4848 | ww亚洲ww亚在线观看 | 国产在线播放一区二区 | 久草在线手机视频 | 日韩艹| 免费观看久久久 | 99看视频在线观看 | 免费a网址| 狠狠狠狠狠色综合 | 成人毛片在线观看视频 | 日韩中字在线 | 国产九色在线播放九色 | 免费人成网 | av福利网址导航大全 | 色吊丝在线永久观看最新版本 | 国产成人av片| 久久综合之合合综合久久 | 国产一区成人在线 | 久久久www免费电影网 | 国产精品电影在线 | 99久久婷婷国产综合精品 | 国产亚洲久一区二区 | 曰韩精品 | www.久久久精品 | 午夜国产在线观看 | 一级做a视频 | 999一区二区三区 | 日韩一级网站 | 精品产品国产在线不卡 | 久久草网| 久草久草在线 | 99久久精品国产毛片 | 免费av大全 | 亚洲精品国偷拍自产在线观看蜜桃 | 岛国大片免费视频 | 成人a级大片 | 一区二区中文字幕在线 | www国产亚洲精品久久网站 | 欧美午夜精品久久久久久孕妇 | 国产色在线视频 | 久久久久久久久福利 | 日韩3区| 亚洲成色777777在线观看影院 | 国产手机在线视频 | 久久久久久久久久久久久久电影 | 国产在线观看黄 | 欧美一二在线 | 久草在线免费看视频 | 激情伊人五月天久久综合 | av中文字幕免费在线观看 | 狠狠操狠狠| 国内精品视频一区二区三区八戒 | 久久久国产成人 | 欧美va天堂在线电影 | 国产福利中文字幕 | 欧美综合国产 | 天天玩天天干天天操 | 日韩av片无码一区二区不卡电影 | 欧美在线观看视频免费 | 91免费视频黄 | 日韩久久精品一区二区三区下载 | 亚洲欧洲日韩 | 亚洲午夜av | 国产精品久久久久久久妇 | 国产日韩精品一区二区三区 | 91精品国产电影 | 青青草国产精品视频 | 在线观看mv的中文字幕网站 | 韩国av一区二区三区在线观看 | 国产视频一区二区在线 | 婷婷综合在线 | 夜夜躁天天躁很躁波 | 97超碰网 | 日韩av综合网站 | 欧美二区视频 | 天天综合天天做 | 国产香蕉在线 | 亚洲精选在线 | 丁香五月亚洲综合在线 | 久久综合干 | 综合网天天 | 美女视频是黄的免费观看 | 免费a级黄色毛片 | 人人爽人人爽人人爽人人爽 | 狠狠狠狠狠狠狠干 | 亚洲高清av | 在线精品视频免费播放 | 超碰在线亚洲 | 99精品在线观看 | 欧美成人亚洲 | 久久九九影院 | 午夜精品久久久久久久久久久 | 久久99亚洲精品久久 | 在线黄色av| 日一日操一操 | 99视频国产精品免费观看 | 91精品啪啪 | 久久免费精品 | 色视频成人在线观看免 | 在线精品视频在线观看高清 | a级国产乱理论片在线观看 特级毛片在线观看 | 色在线视频 | 日韩精品1区2区 | 亚洲电影院 | 超碰在线97观看 | 国产精品99久久99久久久二8 | 韩国av免费观看 | 久久婷婷视频 | 国产精品日韩精品 | 日韩精品视频免费看 | 久久综合网色—综合色88 | 91av网站在线观看 | 久久情侣偷拍 | 中文字幕 国产视频 | 色99网| 综合网色 | 成人永久在线 | 国产精品系列在线观看 | 五月天婷亚洲天综合网鲁鲁鲁 | 久久精品二区 | 天天艹天天 | 免费观看一级特黄欧美大片 | 99视频免费播放 | 久久婷婷精品 | 国产伦精品一区二区三区在线 | 99久久久成人国产精品 | 国产69熟| 亚洲人成在线观看 | 亚洲人片在线观看 | 免费视频 三区 | 丁香5月婷婷 | 欧美一区二区三区免费看 | 日韩国产欧美视频 | 欧美动漫一区二区三区 | 国产精品密入口果冻 | 在线观看免费观看在线91 | 国产首页 | 日韩午夜高清 | 九九精品视频在线看 | 精品99视频| 久久久久国产成人免费精品免费 | 天天操天天射天天爱 | 成年人在线看片 | 久久久久国产视频 | 麻豆91在线播放 | 国产日女人 | 国产高清黄色 | 国产精品一区二区三区四区在线观看 | 国产一区免费视频 | 天天干天天弄 | 亚洲精品在线一区二区三区 | 狠狠色丁香久久综合网 | 免费网站在线观看成人 | 中文字幕亚洲综合久久五月天色无吗'' | 国产视频一区在线免费观看 | 久草在线看片 | 国产原创av片 | www.夜夜操.com | 日本黄色免费播放 | 日韩免费电影一区二区 | 婷婷五综合 | 国产一区在线视频观看 | 欧美日韩性生活 | 中文字幕在线观看亚洲 | 色吧av色av | 伊人午夜| 午夜色性片 | 免费看黄在线观看 | 亚洲精品在线二区 | 在线免费观看黄 | 国产视频1区2区3区 久久夜视频 | 欧美精品久久久久久久久久白贞 | 久久激情五月婷婷 | 日本中文不卡 | 亚洲精品视频免费在线 | 精品久久久久久一区二区里番 | 亚洲成a人片在线观看中文 中文字幕在线视频第一页 狠狠色丁香婷婷综合 | 久久av网 | 在线观看亚洲电影 | 97在线超碰 | 黄色免费av | 夜夜狠狠| 国产精品毛片一区视频播 | 久久久久成人精品 | 久久成视频 | 一级黄色片在线免费看 | 国产精品精 | 久久激情五月激情 | 天天干天天插 | 亚洲欧美日本一区二区三区 | 麻豆播放 | 在线之家免费在线观看电影 | 国产精品ssss在线亚洲 | 久久免费看视频 | 91丨九色丨91啦蝌蚪老版 | 91在线看视频 | a'aaa级片在线观看 | 五月婷影院 | 激情欧美日韩一区二区 | 美女视频黄是免费的 | 亚洲开心色| 亚洲艳情 | 久久婷婷综合激情 | 久久免费播放视频 | 成人一级黄色片 | 日本激情中文字幕 | 香蕉视频日本 | 国产一区高清在线观看 | www178ccom视频在线 | 韩国一区在线 | 国产h片在线观看 | 中文字幕在线观看第二页 | 午夜久操| 精品免费久久 | 久久伊人精品一区二区三区 | 久久99在线观看 | 日韩午夜高清 | 精品国产一区二区在线 | 伊人资源站 | 女人久久久久 | 久久超级碰 | 西西4444www大胆艺术 | 九九久久免费 | 免费av观看 | 欧美激情亚洲综合 | 精品一区欧美 | 免费看wwwwwwwwwww的视频 久久久久久99精品 91中文字幕视频 | 久久66热这里只有精品 | 成人网页在线免费观看 | 婷婷av在线 | 免费亚洲精品视频 | 亚洲欧美日韩中文在线 | 久久草在线视频国产 | 伊人五月天综合 | 日韩av成人 | 欧美日韩1区 | 国产一级免费视频 | 日韩av电影网站在线观看 | 久久99精品久久久久久三级 | 97超碰影视| 伊人伊成久久人综合网站 | 黄色一级大片免费看 | 日韩福利在线观看 | 午夜久久久久久久久久影院 | 欧美 高跟鞋交 xxxxhd | 日韩视频一区二区三区在线播放免费观看 | 国产二区电影 | 99热九九这里只有精品10 | 97超碰人人爱 | 狠狠色综合欧美激情 | 91精品视频在线播放 | 久久一区二区免费视频 | 视频二区在线 | bbbbb女女女女女bbbbb国产 | 蜜臀久久99精品久久久无需会员 | 激情开心站| 中文字幕在线观看播放 | 日韩在线激情 | 日韩免费看视频 | 国产免费又粗又猛又爽 | 亚洲色图美腿丝袜 | 99re6热在线精品视频 | 色综合天 | 黄色福利 | 在线免费高清视频 | 亚洲国产精品女人久久久 | 91亚洲激情 | 国产精品 999 | 超碰999| 国产福利91精品一区 | 干干干操操操 | 日韩精品不卡 | 国产亲近乱来精品 | 全久久久久久久久久久电影 | 久久天天拍| 日韩三级免费 | 欧美成人a在线 | 中文字幕欲求不满 | av成人免费在线观看 | 免费高清在线视频一区· | 日韩中文字幕视频在线观看 | 欧美亚洲一级片 | 日韩一区二区三区视频在线 | 欧美 激情在线 | 国产亚洲一区二区在线观看 | 91九色视频在线 | 在线观看视频黄 | 欧美另类重口 | 欧美a级片免费看 | 国产成人在线播放 | 99精品国产高清在线观看 | 色婷婷av一区二 | 天天曰夜夜爽 | 激情综合六月 | www.久热| 四虎影视国产精品免费久久 | 国产精品久久久久aaaa九色 | 久久久久久久久久亚洲精品 | 在线观看日韩免费视频 | 私人av| 黄色网址在线播放 | 亚洲欧美成人在线 | www狠狠| 97香蕉久久超级碰碰高清版 | 99视频免费 | 91九色在线 | 午夜在线看片 | 91九色蝌蚪国产 | 四月婷婷在线观看 | 狠狠干狠狠插 | 不卡av在线 | www.国产毛片| 五月天天色 | 波多野结衣视频一区 | 欧美日韩在线播放 | 国内精品久久久久影院优 | 久久精品99久久久久久2456 | 亚洲人成免费网站 | 99热精品在线观看 | www.久久久久 | 婷婷www | www国产亚洲精品久久网站 | 免费看亚洲毛片 | 国产精品视频永久免费播放 | 久久午夜免费视频 | 亚洲国产天堂av | 在线观看免费观看在线91 | 久久99亚洲精品久久 | 欧美 激情 国产 91 在线 | 午夜精品视频一区二区三区在线看 | 最近字幕在线观看第一季 | 色六月婷婷 | 久草在线在线视频 | 国产1区2| 婷婷五情天综123 | 中文字幕在线中文 | 免费在线观看日韩视频 | 日本免费一二三区 | 亚洲免费国产视频 | 99久久国产免费,99久久国产免费大片 | 深爱激情婷婷网 | 日韩在线观看三区 | 国产婷婷在线观看 | 96久久精品 | 久久免费美女视频 | 国产精品免费小视频 | 99久久久久 | 91九色蝌蚪视频网站 | 亚洲理论在线观看 | 久久精品视频中文字幕 | 久久久99国产精品免费 | 亚洲一区二区精品3399 | 青青河边草免费观看完整版高清 | 免费黄色在线播放 | 天天做天天看 | 91福利社在线观看 | 99资源网| 日韩久久久久久久 | 黄色免费国产 | 四虎成人在线 | 欧美黑人性猛交 | 国产高清视频在线免费观看 | 国产999精品久久久影片官网 | 亚洲黄网址 | 日韩av成人免费看 | 免费观看国产成人 | 国产精品久久久久久久久久ktv | 久久免费中文视频 | 69av国产 | 91香蕉亚洲精品 | 91资源在线 | 99精品视频在线免费观看 | 在线视频婷婷 | 一二三四精品 | 91精品久久久久久久99蜜桃 | 日韩色视频在线观看 | 国产精品免费久久久久久 | 久久久蜜桃 | 久久成人国产精品入口 | 一 级 黄 色 片免费看的 | 天天干夜夜夜操天 | 欧美久久久久久久久久久 | 国产成人精品一区二区三区网站观看 | 黄色成人影视 | 亚洲黄色免费在线看 | 区一区二区三在线观看 | 亚洲专区欧美专区 | 久久久久国产精品一区二区 | 国产色综合天天综合网 | 国产一区免费视频 | 网站在线观看你们懂的 | 亚洲精品国产精品国自产观看浪潮 | 四虎影视精品永久在线观看 | 天天插日日操 | 午夜久久网站 | 国产一区麻豆 | 丁香六月国产 | 不卡av在线| 亚洲欧洲国产精品 | 美女网站在线看 | 91视频在线 | 日韩精品一区二区三区电影 | 国产精品国产三级国产 | 又黄又刺激视频 | 亚洲精品玖玖玖av在线看 | 久久er99热精品一区二区三区 | 亚洲欧美视频在线播放 | 2019免费中文字幕 | 99在线观看免费视频精品观看 | 九九精品在线观看 | 99在线国产 | 中文字幕专区高清在线观看 | 午夜少妇 | 涩涩网站在线观看 | 日本久久久久久科技有限公司 | 国产精品毛片一区视频播不卡 | 久久爱导航 | 玖玖爱国产在线 | 探花视频网站 | 91亚色免费视频 | 亚州av网站 | 久香蕉 | 日韩欧美在线视频一区二区三区 | 韩国精品一区二区三区六区色诱 | 九九交易行官网 | 国产男女爽爽爽免费视频 | 正在播放五月婷婷狠狠干 | 伊人看片 | 欧美视频www| 人人爽人人爽人人 | 三级av中文字幕 | 欧美性生活一级片 | 久久高清国产视频 | 国产成人精品一区二三区 | 国产一级片免费播放 | 亚洲精品999 | 成人免费xyz网站 | 97超碰人人模人人人爽人人爱 | 国产91影院 | 国产精品自产拍在线观看网站 | 国产特级毛片aaaaaa高清 | 色网站在线 | 国产精品正在播放 | 在线中文日韩 | 91av短视频| 婷婷色网站| 91人人澡人人爽 | 亚洲综合色网站 | 亚州国产精品视频 | 亚洲精品乱码久久久久久蜜桃不爽 | 日日干av | 久久夜夜爽 | 一区二区不卡 | 欧美日韩a视频 | 91精品啪在线观看国产线免费 | 中文字幕国产精品 | 制服丝袜在线91 | 久久草在线精品 | 久久超碰免费 | 91亚洲永久精品 | 日韩欧美在线观看一区二区 | 日韩色综合网 | 国产精品成人自产拍在线观看 | 午夜精品电影 | 激情av资源网 | 国产黄色美女 | 欧美日韩国产综合网 | 久久久久国产精品午夜一区 | 久久久久激情 | www.五月激情.com| 国产成人精品久久久久蜜臀 | 丰满少妇在线观看 | 五月天欧美精品 | 免费日韩视 | 91麻豆精品国产91久久久无限制版 | 视频一区二区在线观看 | 久久成人久久 | 深爱婷婷网 | 久久久久久久久久久久久久av | 久久久官网 | 男女啪啪网站 | 日韩视频a| 亚洲黄色免费网站 | 亚洲蜜桃在线 | 91 在线视频播放 | av中文字幕免费在线观看 | 免费看成人片 | 欧美 国产 视频 | 99在线视频免费观看 | 亚洲午夜久久久综合37日本 | 视频在线在亚洲 | 久久av免费 | 这里有精品在线视频 | 亚洲精品乱码白浆高清久久久久久 | 999日韩| 91高清免费 | 国产国语在线 | 777久久久| 久久精品国产亚洲aⅴ | 碰超在线97人人 | 视频福利在线观看 | 国产精品18久久久久久久久久久久 | 草久视频在线 | 国产精品成久久久久三级 | 久久久久夜色 | 精品国产免费一区二区三区五区 | 久久久久激情电影 | 97在线看片 | 久久久久区 | a在线观看免费视频 | 激情动态| 国产专区在线播放 | 丝袜精品视频 | 久久国产精品免费视频 | 日韩理论在线视频 | 夜夜爽88888免费视频4848 | 国产精品亚洲a | 99热.com| 五月激情亚洲 | 人人干天天射 | 欧美性生交大片免网 | 93久久精品日日躁夜夜躁欧美 | 久久久久久免费毛片精品 | 精品视频免费看 | 欧美色图88| 日本久久中文字幕 | 五月天婷婷丁香花 | 高清日韩一区二区 | 2000xxx影视 | 精品视频免费久久久看 | 欧美性极品xxxx娇小 | 久久免费国产电影 | 日韩专区在线观看 | 天天爽夜夜爽精品视频婷婷 | 国产又黄又硬又爽 | 久久69精品| 在线国产日韩 | 国产破处视频在线播放 | 在线观看香蕉视频 | 狠狠狠色丁香综合久久天下网 | 国产精品中文 | 毛片网在线 | 日韩精品一区二 | 国产在线无 | 久久99国产一区二区三区 | 永久免费观看视频 | 国产日韩欧美在线 | 国产99在线播放 | 成人a视频片观看免费 | 中文字幕在线一区二区三区 | 在线国产福利 | 免费视频一级片 | 一级免费看视频 | 午夜av电影 | 国产爽妇网 | 在线国产能看的 | 日韩久久影院 | 中文字幕在线观看不卡 | 免费看黄的视频 | 天天干天天草天天爽 | 激情综合色综合久久综合 | 亚洲精品在线一区二区 | 久久久视频在线 | 91香蕉视频好色先生 | 久久精品久久精品久久精品 | 91麻豆精品一区二区三区 | 国产一级二级三级在线观看 | 国产 日韩 欧美 在线 | 操天天操 | 91亚洲夫妻 | 性色视频在线 | 国产在线a免费观看 | 国产99久久精品一区二区300 | 蜜臀aⅴ国产精品久久久国产 | 中文字幕 国产视频 | 综合精品久久久 | 国语对白少妇爽91 | 国产精品精品国产 | wwwwww色 | 成人免费在线看片 | 91久久国产露脸精品国产闺蜜 | 久久综合网色—综合色88 | 少妇bbw揉bbb欧美 | 人成免费网站 | 六月色丁 | 国产精品乱码在线 | 国产精品视频最多的网站 | 人人射人人射 | www五月天com | 免费网站v| 91精品伦理| 亚洲人久久久 | 99色人| 中文字幕免费在线看 | 深爱激情五月婷婷 | 久久久久草 | 日韩精品一区二区不卡 | 国产精品麻豆99久久久久久 | 中文字幕av免费在线观看 | 久久久人 | 国产夫妻av在线 | 黄色aaa级片| 欧美一区二区免费在线观看 | 日韩欧美在线观看一区 | 国产一级免费av | 欧美日韩高清一区二区 | 亚洲精品视频在线免费播放 | 中文字幕第一页av | 午夜视频在线观看一区二区三区 | 久久久亚洲国产精品麻豆综合天堂 | 久久久香蕉视频 | 国产一级视频免费看 | 欧美视频日韩视频 | 亚州免费视频 | 中文资源在线播放 | 国产亚洲精品久久久久久电影 | 欧美日韩天堂 | 激情久久综合 | 日韩啪啪小视频 | 中文字幕高清av | 亚洲人成精品久久久久 | 2019久久精品 | 成人精品影视 | 国产精品一区二区中文字幕 | 日本午夜在线观看 | 最近中文字幕免费视频 | 中文字幕人成人 | 一区二区 不卡 | 国产一线二线三线性视频 | 超碰官网| 国内精品久久久久久久久久久久 | 国产一区二区在线观看免费 | 国产123av| 一区二区伦理 | 精品国产免费av | 91在线文字幕 | 夜夜夜草 | 亚洲精品一区二区在线观看 | 日韩特黄一级欧美毛片特黄 | 午夜国产一区二区 | 国产一级免费电影 | 国产传媒一区在线 | 欧美日韩破处 | 久久婷婷丁香 | 天天色天天色 | 中文字幕色婷婷在线视频 | 人人玩人人添人人澡超碰 | 国产成人精品久久久久 | 久久久久五月天 | 婷婷丁香六月天 | 中文字幕视频网站 | 精品99久久久久久 | www.午夜色.com | 综合激情婷婷 | 亚洲黄色在线 | 天天综合操 | 久久99国产精品免费网站 | 91精品1区2区 | 国产黄色大全 | 97色婷婷人人爽人人 | 成人av影视在线 | 免费av免费观看 | 欧美黄色成人 | 国产一二三四在线视频 | 好看av在线 | 国产黄色特级片 | 99九九99九九九视频精品 | 成人午夜影院 | 黄色91在线观看 | 国产精品久久麻豆 | av一区二区三区在线播放 | 激情导航| 日本精品一区二区三区在线观看 | 国产精品一区二区久久精品爱微奶 | 麻豆国产视频 | 狠狠狠狠狠狠狠 | 丝袜美腿av | 日韩中文字幕免费在线观看 | 麻豆视频一区二区 | 91新人在线观看 | 五月激情五月激情 | 九九九在线观看视频 | 免费在线黄色av | 狠狠躁夜夜躁人人爽超碰97香蕉 | 成人亚洲网 | 999抗病毒口服液 | 日韩欧美在线视频一区二区三区 | 国产中文字幕在线播放 | 久久久久综合 | 免费一级片视频 | a在线免费观看视频 | 国产成人精品综合久久久 | 91在线公开视频 | 免费碰碰 | 91免费在线视频 | 久久久精品国产一区二区 | 国产精品久久网站 | 天天操夜夜操天天射 | 国产精品一区二区在线看 | 国产999精品久久久 免费a网站 | 日日夜夜网 | 日韩精品综合在线 | 在线黄色观看 | 中文久久精品 | 中文字幕一二 | 日韩区欧美久久久无人区 | 在线看国产日韩 | 国产成人一区二区三区免费看 | 中午字幕在线 | 亚洲人成在线电影 | 久久人人射 | 婷婷视频| 亚洲激情六月 | 精品免费国产一区二区三区四区 | 久久人人爽人人爽人人片av免费 | 精品久久综合 | 97香蕉久久超级碰碰高清版 | 干干夜夜 | 超碰99在线 | 亚洲高清国产视频 | 亚洲开心激情 | 国产精品欧美一区二区 | 人人插人人澡 | 亚洲精品综合久久 | 国产精品videoxxxx | 四虎影视成人永久免费观看视频 | 中文字幕一区二区在线播放 | 日韩成人免费在线 | 国产在线播放不卡 | 99国产高清| 免费黄色激情视频 | 午夜久久久影院 | 久久少妇免费视频 | 麻豆视频免费 | 尤物九九久久国产精品的分类 | 国产91电影在线观看 | 久久精品第一页 | 天天做综合网 | 九九免费观看全部免费视频 | 久久久精品国产一区二区 | 97成人啪啪网 | 精品理论片 | av先锋影音少妇 | 丁香综合av | 91av蜜桃| 日本中文字幕在线电影 | 国产伦精品一区二区三区四区视频 | 国产一区二区不卡视频 | 99视频一区 | 国产精品资源在线观看 | 国产白浆在线观看 | 天堂在线视频免费观看 | 24小时日本在线www免费的 | 特级西西444www大胆高清无视频 | 亚洲高清视频在线观看免费 | 国产a国产a国产a | 99精品在线免费 | 精品亚洲va在线va天堂资源站 | 中文国产字幕 | 日韩在线观看一区二区 | 国产视频在线观看一区 | 精品久久国产一区 | 中文字幕成人在线观看 | 欧美日韩在线精品一区二区 | 国产精品尤物视频 | 国产在线观看中文字幕 | 久久特级毛片 | 国产剧情一区二区在线观看 | 国产精品高潮呻吟久久av无 | 亚洲一区 影院 | 中文字幕在线视频国产 | 国产一线二线三线性视频 | 日韩高清一二三区 | 中文字幕精品www乱入免费视频 | 精品1区2区3区 | 草免费视频 | av免费网站在线观看 | 青青河边草免费直播 | 国产高清免费视频 | 有码中文在线 | 五月婷婷开心中文字幕 | 天堂成人在线 | 精品国产中文字幕 | 国产99中文字幕 | 日韩中文在线播放 | 天堂av在线7| 国产精品第十页 | 99资源网 | 麻豆94tv免费版 | 狠狠躁日日躁狂躁夜夜躁 | av在线com| 人人射网站 | va视频在线| 国产精品久久久区三区天天噜 | 久久av免费电影 | 欧美疯狂性受xxxxx另类 | 久久久久久蜜桃一区二区 | 亚洲综合日韩在线 | 亚洲黄色软件 | 草久视频在线观看 | 最近能播放的中文字幕 | 欧美色综合天天久久综合精品 | 开心激情婷婷 | 国产亚洲精品久久久久久久久久久久 | av三级av | 日韩免费在线观看视频 | 激情伊人 | 女人高潮特级毛片 | 在线视频区 | 久久免费看 | 96av麻豆蜜桃一区二区 | 国产日韩视频在线观看 | 日批在线看 | 美女视频久久久 | 欧美色插 | 美女网站色在线观看 | 中文字幕91视频 | 免费日韩av片 | 精品美女久久久久久免费 | 欧美日韩中文字幕在线视频 | 欧美精品一区二区在线观看 | 超级碰碰碰视频 | 色婷婷丁香| 国产视频欧美视频 | 欧美一区二区在线 | 精品国模一区二区 | www.888av| 日日精品 | 中文在线中文a | 久久综合网色—综合色88 | 999久久久久久久久6666 | 伊人影院得得 | 久久精品国产第一区二区三区 | 叶爱av在线 | 欧美国产日韩激情 | 欧美日韩午夜在线 | 国产精品亚洲精品 | 国产又粗又猛又色又黄网站 | 国产一级在线 | 91热视频在线观看 | 丁香六月婷婷开心 | 日韩电影一区二区在线观看 | 国产视频18 | 成人动漫一区二区 | 粉嫩一区二区三区粉嫩91 | 色爱成人网 | 日韩国产精品久久久久久亚洲 | 中文字幕在线观看第二页 | 五月综合激情 | 日韩久久网站 | 国产国产人免费人成免费视频 | 色网站免费在线看 | 少妇超碰在线 | 成人午夜免费剧场 | 在线免费观看成人 | 久艹在线免费观看 | 丁香六月在线 | 国产精品免费看久久久8精臀av | a视频免费 | 国产黄a三级三级三级三级三级 | 久久黄色精品视频 | 欧美韩国日本在线观看 | 国内小视频 | 国产午夜在线观看视频 | 久久精品日产第一区二区三区乱码 | 国产成人亚洲在线观看 | 在线日韩| 粉嫩av一区二区三区免费 | 免费av网址大全 | www.色午夜.com| 久久久久久欧美二区电影网 | 久久视频这里只有精品 | 日韩av资源在线观看 | 天堂av在线网站 | 婷婷国产一区二区三区 | 91在线国内视频 | 天天干天天干天天干天天干天天干天天干 | 99精品偷拍视频一区二区三区 | 精品国产免费看 | 欧美日韩视频在线一区 | 日韩欧美视频在线免费观看 | 亚洲精品午夜一区人人爽 | 美女黄网站视频免费 | 日韩av不卡播放 | 99久久日韩精品视频免费在线观看 | 天天操操| 日韩欧美一区二区三区免费观看 | 免费在线观看不卡av | 亚洲视频网站在线观看 | 美女网站色 | 色播五月激情综合网 | 色夜视频 | 日韩av影片在线观看 | 高清不卡一区二区在线 | 国产美女精彩久久 | 99精品区 |