久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁技術(shù)文章
文章詳情頁

解析Android框架之Volley源碼

瀏覽:14日期:2022-09-18 11:08:11
目錄Volley簡單使用Volley執(zhí)行原理Volley簡單使用

我這里是以依賴架包的形式 ,大家也可以以gradle的形式進(jìn)行依賴。

解析Android框架之Volley源碼

好了,接下來上代碼了.....

//獲取volley的請求對象RequestQueue requestQueue = Volley.newRequestQueue(getApplicationContext());StringRequest stringRequest = new StringRequest(StringRequest.Method.GET, 'http://www.baidu.com', new Response.Listener<String>() { @Override public void onResponse(String s) {Log.d('MainActivity', '----->' + s); }}, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError volleyError) {Log.d('MainActivity', '---volleyError-->' + volleyError); }});requestQueue.add(stringRequest);

從代碼可以看出,首先newRequestQueue來獲取到一個請求隊(duì)列,然后在將StringRequest這個請求添加到請求隊(duì)列中,就可以了,就是這么簡單。當(dāng)然請求不值StringRequest,還有JsonObjectRequest ,ImageRequest等等但是用法都是一樣的,這里就不貼代碼了。Volley的簡單使用就這樣可以進(jìn)行請求了。是不是很簡單

Volley執(zhí)行原理

但是這個不是本篇的重點(diǎn),重點(diǎn)是分析一下這些是怎么執(zhí)行的。先上一張圖

解析Android框架之Volley源碼

我們先看看newRequestQueue這個內(nèi)部是怎么執(zhí)行的,代碼一開始連續(xù)執(zhí)行了幾個重載方法,最后走到newRequestQueue

public static RequestQueue newRequestQueue(Context context, HttpStack stack, int maxDiskCacheBytes) { File cacheDir = new File(context.getCacheDir(), 'volley'); String userAgent = 'volley/0'; try {String packageName = context.getPackageName();PackageInfo info = context.getPackageManager().getPackageInfo(packageName, 0);userAgent = packageName + '/' + info.versionCode; } catch (NameNotFoundException var7) {; } //這里進(jìn)行了一個版本的判斷 2.3之前用的是HTTPClient,2.3之后使用的是HttpURLConnection if (stack == null) {if (VERSION.SDK_INT >= 9) { stack = new HurlStack();} else { stack = new HttpClientStack(AndroidHttpClient.newInstance(userAgent));} } Network network = new BasicNetwork((HttpStack)stack); RequestQueue queue; if (maxDiskCacheBytes <= -1) {queue = new RequestQueue(new DiskBasedCache(cacheDir), network); } else {queue = new RequestQueue(new DiskBasedCache(cacheDir, maxDiskCacheBytes), network); } queue.start(); return queue;}

在這里,我們看到了一個版本判斷,是不是瞬間感覺有點(diǎn)熟悉,沒錯,我們前面說的,volley2.3之前用的是HTTPClient,2.3之后使用的是HttpURLConnection就是在這里進(jìn)行判斷的。接著看queue.start();

public void start() {this.stop();this.mCacheDispatcher = new CacheDispatcher(this.mCacheQueue, this.mNetworkQueue, this.mCache, this.mDelivery);this.mCacheDispatcher.start();for(int i = 0; i < this.mDispatchers.length; ++i) { NetworkDispatcher networkDispatcher = new NetworkDispatcher(this.mNetworkQueue, this.mNetwork, this.mCache, this.mDelivery); this.mDispatchers[i] = networkDispatcher; networkDispatcher.start();} }

mCacheDispatcher是緩存調(diào)度線程,NetworkDispatcher是網(wǎng)絡(luò)調(diào)度線程,而這個this.mDispatchers.length系統(tǒng)默認(rèn)的大小為4,也就是說,在這里總共啟動了5個線程在后臺運(yùn)行。

好了,到這里,就可以了,看源碼不要每一行都弄懂,不然,出不來了。到這里就拿到了這個RequestQueue對象。回過頭來看前面使用的代碼

//獲取volley的請求對象RequestQueue requestQueue = Volley.newRequestQueue(getApplicationContext());StringRequest stringRequest = new StringRequest(StringRequest.Method.GET, 'http://www.baidu.com', new Response.Listener<String>() { @Override public void onResponse(String s) {Log.d('MainActivity', '----->' + s); }}, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError volleyError) {Log.d('MainActivity', '---volleyError-->' + volleyError); }});requestQueue.add(stringRequest);

我們拿到這個RequestQueue對象以后,然后就把這個請求通過add方法添加到隊(duì)列中,我們看看這個add()方法是怎么執(zhí)行的。

public <T> Request<T> add(Request<T> request) {request.setRequestQueue(this);Set var2 = this.mCurrentRequests;synchronized(this.mCurrentRequests) { this.mCurrentRequests.add(request);}request.setSequence(this.getSequenceNumber());request.addMarker('add-to-queue');if (!request.shouldCache()) { //如果不能緩存 this.mNetworkQueue.add(request); return request;} else { Map var7 = this.mWaitingRequests; synchronized(this.mWaitingRequests) {String cacheKey = request.getCacheKey();if (this.mWaitingRequests.containsKey(cacheKey)) { //判斷之前是否執(zhí)行過,但是還沒有返回結(jié)果 Queue<Request<?>> stagedRequests = (Queue)this.mWaitingRequests.get(cacheKey); if (stagedRequests == null) {stagedRequests = new LinkedList(); } ((Queue)stagedRequests).add(request); this.mWaitingRequests.put(cacheKey, stagedRequests); if (VolleyLog.DEBUG) {VolleyLog.v('Request for cacheKey=%s is in flight, putting on hold.', new Object[]{cacheKey}); }} else {//沒有的話就將請求加入緩存隊(duì)列mCacheQueue,同時加入mWaitingRequests中用來做下次同樣請求來時的重復(fù)判斷依據(jù) this.mWaitingRequests.put(cacheKey, (Object)null); this.mCacheQueue.add(request);}return request; }} }

從代碼中可以看出,首先判斷是否可以緩存,當(dāng)然,默認(rèn)是可以緩存的。如果不能緩存的話,則通過this.mNetworkQueue.add(request);將請求添加到網(wǎng)絡(luò)請求隊(duì)列中。如果可以緩存,則還會判斷一次這個請求是否請求,如果執(zhí)行過就就通過this.mWaitingRequests.put(cacheKey, stagedRequests);添加到mWaitingRequests隊(duì)列,不在重復(fù)請求。否則就加入到緩存隊(duì)列。

大體的流程是這樣。現(xiàn)在我們看看緩存的,和網(wǎng)絡(luò)的是怎么執(zhí)行的。我們找到start()方法

public void start() {this.stop();this.mCacheDispatcher = new CacheDispatcher(this.mCacheQueue, this.mNetworkQueue, this.mCache, this.mDelivery);this.mCacheDispatcher.start();for(int i = 0; i < this.mDispatchers.length; ++i) { NetworkDispatcher networkDispatcher = new NetworkDispatcher(this.mNetworkQueue, this.mNetwork, this.mCache, this.mDelivery); this.mDispatchers[i] = networkDispatcher; networkDispatcher.start();} }

先看CacheDispatcher,找到run()方法

public void run() {if (DEBUG) { VolleyLog.v('start new dispatcher', new Object[0]);}Process.setThreadPriority(10);this.mCache.initialize();while(true) { while(true) {while(true) { while(true) {try { while(true) {final Request<?> request = (Request)this.mCacheQueue.take(); //從緩存隊(duì)列中獲取到一個請求request.addMarker('cache-queue-take');if (request.isCanceled()) { //判斷請求是否取消,如果取消了,那就將該請求finish掉 request.finish('cache-discard-canceled');} else { Entry entry = this.mCache.get(request.getCacheKey()); if (entry == null) {//如果從緩存中取出來的內(nèi)容為空,則將請求加入到網(wǎng)絡(luò)線程中再次請求request.addMarker('cache-miss');this.mNetworkQueue.put(request); } else if (entry.isExpired()) { //如果請求過期了,則將請求加入到網(wǎng)絡(luò)線程中再次請求request.addMarker('cache-hit-expired');request.setCacheEntry(entry);this.mNetworkQueue.put(request); } else { //將數(shù)據(jù)回調(diào)到主線程request.addMarker('cache-hit');Response<?> response = request.parseNetworkResponse(new NetworkResponse(entry.data, entry.responseHeaders));request.addMarker('cache-hit-parsed');if (entry.refreshNeeded()) { request.addMarker('cache-hit-refresh-needed'); request.setCacheEntry(entry); response.intermediate = true; this.mDelivery.postResponse(request, response, new Runnable() {public void run() {try { CacheDispatcher.this.mNetworkQueue.put(request);} catch (InterruptedException var2) { ;}} });} else { this.mDelivery.postResponse(request, response);} }} }} catch (InterruptedException var4) { if (this.mQuit) {return; }} }} }} }

這里嵌套了幾個循環(huán),有點(diǎn)凌亂啊,但是慢慢分析的話,就會發(fā)現(xiàn),其實(shí)很清晰。我在注釋上面寫了,這里就不重復(fù)了

我們在看看NetworkDispatcher,看看網(wǎng)絡(luò)線程是怎么執(zhí)行的。一樣找到run()方法

public void run() {Process.setThreadPriority(10);while(true) { long startTimeMs; Request request; while(true) {startTimeMs = SystemClock.elapsedRealtime();try { request = (Request)this.mQueue.take(); //獲取到一個請求 break;} catch (InterruptedException var6) { if (this.mQuit) {return; }} } try {request.addMarker('network-queue-take');if (request.isCanceled()) { //如果請求取消了,則將請求finish掉 request.finish('network-discard-cancelled');} else {//進(jìn)行網(wǎng)絡(luò)請求 this.addTrafficStatsTag(request); NetworkResponse networkResponse = this.mNetwork.performRequest(request); request.addMarker('network-http-complete'); if (networkResponse.notModified && request.hasHadResponseDelivered()) {request.finish('not-modified'); } else {Response<?> response = request.parseNetworkResponse(networkResponse);request.addMarker('network-parse-complete');if (request.shouldCache() && response.cacheEntry != null) { this.mCache.put(request.getCacheKey(), response.cacheEntry); request.addMarker('network-cache-written');}request.markDelivered();this.mDelivery.postResponse(request, response); }} } catch (VolleyError var7) {var7.setNetworkTimeMs(SystemClock.elapsedRealtime() - startTimeMs);this.parseAndDeliverNetworkError(request, var7); } catch (Exception var8) {VolleyLog.e(var8, 'Unhandled exception %s', new Object[]{var8.toString()});VolleyError volleyError = new VolleyError(var8);volleyError.setNetworkTimeMs(SystemClock.elapsedRealtime() - startTimeMs);this.mDelivery.postError(request, volleyError); }} }

代碼比較多,我們直接找到NetworkResponse networkResponse = this.mNetwork.performRequest(request);這句代碼,這句代碼就是請求網(wǎng)絡(luò)的代碼,最核心的。performRequest是一個接口,我們看看這個performRequest()方法。Network在最開始說版本判斷的時候里面有一句代碼Network network = new BasicNetwork((HttpStack)stack); 從這句代碼,我們可以知道BasicNetwork才是最終實(shí)現(xiàn)網(wǎng)絡(luò)請求的類,我們找到performRequest方法

public NetworkResponse performRequest(Request<?> request) throws VolleyError {long requestStart = SystemClock.elapsedRealtime();while(true) { HttpResponse httpResponse = null; byte[] responseContents = null; Map responseHeaders = Collections.emptyMap(); try {Map<String, String> headers = new HashMap();this.addCacheHeaders(headers, request.getCacheEntry());httpResponse = this.mHttpStack.performRequest(request, headers);StatusLine statusLine = httpResponse.getStatusLine();int statusCode = statusLine.getStatusCode();responseHeaders = convertHeaders(httpResponse.getAllHeaders());if (statusCode == 304) { Entry entry = request.getCacheEntry(); if (entry == null) {return new NetworkResponse(304, (byte[])null, responseHeaders, true, SystemClock.elapsedRealtime() - requestStart); } entry.responseHeaders.putAll(responseHeaders); return new NetworkResponse(304, entry.data, entry.responseHeaders, true, SystemClock.elapsedRealtime() - requestStart);}if (statusCode == 301 || statusCode == 302) { String newUrl = (String)responseHeaders.get('Location'); request.setRedirectUrl(newUrl);}byte[] responseContents;if (httpResponse.getEntity() != null) { responseContents = this.entityToBytes(httpResponse.getEntity());} else { responseContents = new byte[0];}long requestLifetime = SystemClock.elapsedRealtime() - requestStart;this.logSlowRequests(requestLifetime, request, responseContents, statusLine);if (statusCode >= 200 && statusCode <= 299) { return new NetworkResponse(statusCode, responseContents, responseHeaders, false, SystemClock.elapsedRealtime() - requestStart);}throw new IOException(); } catch (SocketTimeoutException var12) {attemptRetryOnException('socket', request, new TimeoutError()); } catch (ConnectTimeoutException var13) {attemptRetryOnException('connection', request, new TimeoutError()); } catch (MalformedURLException var14) {throw new RuntimeException('Bad URL ' + request.getUrl(), var14); } catch (IOException var15) {int statusCode = false;NetworkResponse networkResponse = null;if (httpResponse == null) { throw new NoConnectionError(var15);}int statusCode = httpResponse.getStatusLine().getStatusCode();if (statusCode != 301 && statusCode != 302) { VolleyLog.e('Unexpected response code %d for %s', new Object[]{statusCode, request.getUrl()});} else { VolleyLog.e('Request at %s has been redirected to %s', new Object[]{request.getOriginUrl(), request.getUrl()});}if (responseContents == null) { throw new NetworkError(networkResponse);}networkResponse = new NetworkResponse(statusCode, (byte[])responseContents, responseHeaders, false, SystemClock.elapsedRealtime() - requestStart);if (statusCode != 401 && statusCode != 403) { if (statusCode != 301 && statusCode != 302) {throw new ServerError(networkResponse); } attemptRetryOnException('redirect', request, new AuthFailureError(networkResponse));} else { attemptRetryOnException('auth', request, new AuthFailureError(networkResponse));} }} }

代碼比較多,但是大多數(shù)代碼是判斷狀態(tài)返回碼的,不需要理會。

我們直接看httpResponse = this.mHttpStack.performRequest(request, headers);這一句代碼,HttpStack這個有沒有很熟悉。沒有??沒關(guān)系我在復(fù)制一次代碼

if (stack == null) { if (VERSION.SDK_INT >= 9) {stack = new HurlStack(); } else {stack = new HttpClientStack(AndroidHttpClient.newInstance(userAgent)); }}

還是在這個版本判斷這里,這里就是HurlStack就是真正的網(wǎng)絡(luò)請求的類了,網(wǎng)絡(luò)請求,就是寫在這個類里面的。好了,volley整個流程大概就是這樣了。現(xiàn)在大家回過頭看最初的哪一張圖,是不是明了很多。

以上就是解析Android框架之Volley源碼的詳細(xì)內(nèi)容,更多關(guān)于Android框架之Volley源碼的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Android
相關(guān)文章:
主站蜘蛛池模板: 中文字幕本久久精品一区 | 99热热热| 羞羞视频在线播放 | 国产成人精品亚洲日本在线观看 | 第一福利丝瓜av导航 | 精品国偷自产在线 | 超黄视频在线观看 | 日日操夜夜操天天操 | 日本在线观看一区 | 亚洲精品久久久一区二区三区 | 中文字幕视频在线观看 | 日韩av在线免费电影 | 久久久久久国产精品 | 在线观看精品自拍私拍 | 五月婷婷丁香婷婷 | 午夜精品一区二区三区免费视频 | 91精品国产综合久久久久久丝袜 | 国产91麻豆视频 | 日本黄色毛片 | a网站在线观看 | 色资源在线| 国产99久久精品一区二区永久免费 | 精品三级在线观看 | 日本在线免费 | 欧美精品一区二区三区手机在线 | 一二三区精品 | 黄色电影在线免费观看 | 综合久久色 | 成人免费视频网站在线看 | 欧美日本国产欧美日本韩国99 | 午夜精品一区二区三区四区 | 一级做a| 久久综合社区 | 超碰在线91 | 久久精品免费电影 | 日本一区二区不卡视频 | 日本一本视频 | 伊人精品在线 | 亚洲三级网站 | 国产欧美综合一区 | 剑来在线观看 | 久久青| 国外成人在线视频 | 国产一区二区三区高清 | 影音先锋中文字幕一区 | 天天澡天天狠天天天做 | 日韩国产 | 狠狠色综合久久丁香婷婷 | 伊人网视频在线观看 | 在线观看成人av | 久久69精品久久久久久久电影好 | 在线播放国产一区二区三区 | 一区电影 | 成人欧美 | 久草热线视频 | 五月激情综合网 | 蜜桃中文字幕 | 色久在线 | 亚洲精品视频免费 | www久久国产 | 日本在线观看一区二区 | 日韩色在线 | 国产欧美一区二区三区在线看 | 中文字幕在线第二页 | 亚洲午夜在线 | av免费观看在线 | 亚洲欧美成人影院 | 国产精品999| 国产高清在线精品一区二区三区 | 亚洲一区二区三区四区五区中文 | 日韩精品无码一区二区三区 | 亚洲欧美中文日韩v在线观看 | 亚洲欧美日韩电影 | 日韩一片 | 91亚洲国产成人久久精品网站 | 一二三四在线视频观看社区 | 天天操天天拍 | 一区不卡 | 久久国产精品久久久久久电车 | 国产一区二区精品在线 | 久久久久久久久久毛片 | 午夜精品一区二区三区免费视频 | 国产亚洲精品久久久久久久久 | 国产福利视频在线观看 | 999国产| 国产精品毛片久久久久久久 | 久久精品网 | 日韩一区二区视频在线 | 久久久一区二区 | 日韩视频一区二区 | 免费看国产片在线观看 | 国产在线观看一区二区三区 | 黄毛片网站 | 久久亚洲精品视频 | 综合久久综合久久 | 国产精品欧美一区二区三区 | 久久久久av | 国产视频观看 | 美女视频一区二区三区 | 日韩成人精品 | 欧美在线一区二区三区 | 成人午夜在线视频 | 亚洲人成一区 | 欧美久久久久 | 黄色一级大片在线免费看产 | 天天做天天看 | 亚洲国产一区二区三区四区 | 亚洲电影在线看 | 可以在线观看的av网站 | 亚洲三区在线观看 | 久草视频国产 | 黄色一级片黄色一级片 | 一级电影免费看 | 国产午夜精品视频 | 美女91| 久久999免费视频 | 国产精品久久久久久久久久 | 欧美激情精品久久久久久免费 | 久久2018| 一区二区三区在线观看视频 | 日韩免费在线观看视频 | 在线日本中文字幕 | 亚洲成人中文字幕 | 国产精品永久免费视频 | 免费av在线网站 | 中文字幕一区二区在线观看 | 日韩一区二区在线播放 | 国产亚洲一区二区三区在线观看 | 亚洲人人 | 欧美人妖在线 | 青青草国产成人av片免费 | 亚洲激情在线 | 天天澡天天狠天天天做 | 人人看超碰 | 黄视频网址 | 97男人的天堂 | 久久久91 | ririsao久久精品一区 | 日本特黄特色aaa大片免费 | 99精品福利视频 | 久久99精品久久久噜噜最新章节 | 国产一区二区毛片 | 午夜网址 | 自拍偷拍99 | 国产精品久久久久久亚洲影视 | 日韩精品免费在线观看 | 日本久久久久久久久久久久 | 精品一区二区三区久久久 | 狠狠av| 精品国产乱码久久久久久1区2区 | 久久亚洲天堂 | 国产日本韩国在线 | 亚洲二区在线观看 | 日韩免费激情视频 | 国产精品美女一区二区三区四区 | 色婷婷av一区二区三区软件 | 亚洲视频1区 | 一本一本久久a久久精品综合妖精 | 日韩精品视频三区 | 91精品国产高清一区二区三区 | 中文字幕av一区二区三区 | 久热av在线 | 深夜av在线 | 久久精品国产91精品亚洲高清 | www.国产高清 | 美日一级毛片 | 国产精品69毛片高清亚洲 | 久久久久久九九九九九九 | 麻豆产精国品免费入口 | 亚洲精品国产电影 | 日本色道视频 | 亚洲天堂第一页 | 成人免费精品 | 一区二区成人 | 色婷婷综合久久久久中文一区二区 | 美女视频黄色片 | 日韩一区电影 | 黄视频免费在线 | 亚洲日韩欧美一区二区在线 | 国产精品色综合 | 中文在线播放 | eeuss国产一区二区三区四区 | 中文字幕在线影院 | av综合在线观看 | 日韩精品一区二区三区在线播放 | 欧洲另类交 | 9999久久久久 | 综合中文字幕 | 视频一区二区三区中文字幕 | 亚洲成人一区二区 | 日韩精品免费在线观看 | 小川阿佐美88av在线播放 | 狠狠躁日日躁夜夜躁东南亚 | 91精品国产欧美一区二区成人 | 久久亚洲美女 | 日本久久久一区二区三区 | 一级毛片免费网站 | 日韩欧美二区 | 91av国产在线视频 | 国产精品精品视频一区二区三区 | 精品久久av | 99精品欧美一区二区三区 | 中文字幕一区二区三区在线视频 | 精品亚洲一区二区 | 久久精品手机视频 | 国产精品久久免费视频在线 | 在线观看的av | 免费在线一区二区 | 亚洲精品毛片一区二区 | 91亚洲一区 | 国产噜噜噜噜噜久久久久久久久 | 亚洲免费精品 | 天堂网av2020 | 国产精品久久久久久久久久久久 | 欧美精品片| 伊人短视频 | 久久国产精品久久久久久 | 一区二区精品视频 | 午夜精品久久久久久久久 | 日韩av网站在线 | 亚洲一区二区视频在线观看 | 一区二区三区国产视频 | 国产精品18久久久久久久久久久久 | 国产精品亚洲精品 | 日日操天天操 | 日韩av福利 | 91精品国产综合久久福利软件 | 日本污视频在线观看 | 欧美日韩亚洲一区 | 欧洲一级毛片 | 国产精品成人一区二区三区 | 欧美精三区欧美精三区 | 日日日操| 交视频在线观看国产 | 91日日| 亚洲精品在线免费 | 欧美99| 高清av一区 | 色偷偷噜噜噜亚洲男人 | 亚洲xx在线| 成人av观看 | 日韩一区二区三区在线 | 国产精品日产欧美久久久久 | 色综合99 | 中文字幕在线视频精品 | 亚洲一区二区三区在线 | 一级毛片色一级 | 99国产视频 | 久久精品久久久久久 | 欧美激情在线狂野欧美精品 | 亚洲免费看片 | 成年人精品视频 | 欧美三级免费观看 | 男女午夜| 热久久这里只有精品 | 久草在线资源福利站 | 日韩在线观看视频免费 | 人人鲁人人莫一区二区三区 | 天堂一区 | 成人在线视频一区二区 | 成人免费影院 | 国产精品亚洲精品久久 | 欧美中文在线观看 | 欧美美女爱爱视频 | 日韩和的一区二区 | 成人国产精品久久 | 欧美色综合 | 免费一区二区三区 | 一级在线观看 | 成人在线播放网站 | 伊人网网站 | 日本福利在线观看 | 在线一区二区免费 | 免费一级黄色电影 | 国产欧美在线观看 | 欧美黄色片免费观看 | 精品久久久久久久久久久久 | 日本在线观看一区二区 | 色精品 | 后人极品翘臀美女在线播放 | 亚洲国产二区 | 午夜影院免费 | 国产一区二区综合 | 韩日一区 | 亚洲国产福利一区 | 91在线最新 | 日b片| 天天射天天干 | 亚洲国产婷婷香蕉久久久久久99 | 亚洲h| 一区二区免费在线观看 | 亚洲毛片在线 | 爱爱日韩| 影音先锋国产 | 国产精品自拍视频网站 | 久久另类ts人妖一区二区 | 天天操夜夜爽 | 黄a免费| 偷拍自拍网站 | 第四色影音先锋 | 人妖 丝袜 另类 亚洲 | 欧美一区二区另类 | 午夜伦理影院 | 欧美精品一区二区三区免费视频 | 一级免费片 | 成人免费国产 | 日韩欧美一区二区三区视频 | 精品视频一区二区三区四区 | 色综合天天天天做夜夜夜夜做 | 亚洲午夜精品一区二区三区 | 国产一级纯肉体一级毛片 | 免费观看一区二区三区毛片 | 久久国产欧美日韩精品 | 蜜臀久久99精品久久久无需会员 | 日本亚洲精品成人欧美一区 | 午夜男人天堂 | 红杏aⅴ成人免费视频 | 99热日本 | 成人免费视频视频在线观看 免费 | 国产精品成人一区二区三区 | 一级毛片免费播放 | 成人自拍视频 | 亚洲男人的天堂在线 | 人人澡人人射 | 亚洲激情精品 | 91视频在线观看 | 国产精品亚洲a | 久草新视频在线观看 | 伊人网在线免费观看 | 男女免费视频 | 日本免费网| 自拍小电影| 麻豆沈芯语在线观看 | 婷婷久久五月天 | 国产乱码精品一品二品 | 日韩91| 国产亚洲一区二区三区在线观看 | 国产欧美日韩在线 | 欧美三级免费观看 | 精品成人在线视频 | 精品一区二区在线播放 | 国产精品亚洲成在人线 | 狠狠se| 在线观看av国产一区二区 | 很黄很污的网站 | 久久久精品欧美一区二区免费 | 亚洲精品一区二三区 | 久热官网 | 国产精品九九九 | 亚洲日本二区 | 狠狠操一区二区三区 | 国产亚洲精品v | 国产精品久久久久久久久久久久久 | 精品自拍网 | 一区不卡| 一级黄色大片 | 精品999www| 亚欧洲精品视频在线观看 | 国产一区二区视频在线观看 | 天天干天天操 | av一区二区在线观看 | 欧美精品久久久 | 午夜天堂精品久久久久 | 日本一本在线 | baoyu133. con永久免费视频 | 国产美女中出 | 艳妇荡乳豪妇荡淫 | 山岸逢花在线观看 | 午夜爱爱毛片xxxx视频免费看 | 日本在线视 | 国内自拍视频在线观看 | 成人免费视频在线观看 | 久久久久国产 | 久久青青| 伊人在线 | www.avtt天堂网 | 国产欧美日本 | 正在播放国产精品 | 中文字幕一区二区三区不卡 | 亚洲一区视频网站 | 成人免费在线 | 成人在线免费av | 美女扒开尿口来摸 | 永久精品 | 精品久久久久久亚洲精品 | www.99久 | 日韩有码一区 | 国产最新网站 | 精品国产天堂 | 神马久久久久久久 | 四虎成人在线 | 天天干天天草 | 亚洲人成网站999久久久综合 | 国产精品一区二区三区在线 | 一区二区三区国产精品 | 中文字幕精品一区 | 99riav国产一区二区三区 | 在线观看国产视频 | 超碰人人艹 | 国产视频久久 | 国产精品久久久久久影院8一贰佰 | 看亚洲a级一级毛片 | 黄色一级免费观看 | 日本欧美在线观看 | 欧美人体一区二区三区 | 亚洲精品一区二三区不卡 | 欧美夜夜骑 | 成人毛片在线观看视频 | 国产激情视频在线观看 | 青青草超碰在线 | 黄色av网站在线免费观看 | 欧美一区二区三区在线视频 | 99久久久99久久国产片鸭王 | 中文字幕亚洲区 | 国产福利在线播放 | 久久精品| 中文字幕精品三级久久久 | 日韩精品一区二区三区第95 | 精品国产高清一区二区三区 | a免费在线 | 男女做爰高清无遮挡免费视频 | 一级全黄少妇性色生活片毛片 | 欧洲一区在线 | 狠狠躁夜夜躁人人爽天天高潮 | 日韩午夜激情 | 久草在线资源福利站 | 日韩视频一区二区 | 国产精品视频免费看 | av一区二区三区四区 | 99精品国产在热久久 | 一级大片免费观看 | 久久精品色欧美aⅴ一区二区 | 亚洲国产高清在线 | 日韩三区 | 明里在线观看 | 午夜影院18 | 免费观看一级特黄欧美大片 | 亚洲精品一二三区 | 亚洲一区二区在线播放 | 婷婷毛片 | 中文字幕日韩欧美 | 日本黄色影片在线观看 | 国产第一亚洲 | 亚洲精品在线观看免费 | 国产精品一区二区三区久久 | 国产激情一区二区三区 | 日韩电影免费在线观看中文字幕 | 久久久久久久99 | 日韩久久久久久 | www.xxx免费| 国产精品二区一区 | 亚洲毛片在线观看 | 中文字幕天堂在线 | 国产传媒在线视频 | 91精品国产综合久久久亚洲 | 青青久久| 国产在线第一页 | 美女视频一区 | 国产精品一区在线 | 成人欧美日韩一区二区三区 | 欧美乱轮| 亚洲一区二区在线 | 欧美综合视频在线观看 | 国产精品久久久久久久久免费软件 | 亚洲精品乱码久久久久久蜜桃不爽 | 91精品国产乱码久久久久久久久 | 99re6在线视频精品免费 | 国产一区二区视频在线观看 | 欧美日韩视频在线第一区 | 欧美一区二区三区视频 | 一区二区日韩 | 欧美激情一区二区三区四区 | 一区二区精品在线 | 天天天天天天天天干 | 男女视频免费 | 欧美精品日韩 | 中文字幕一区二区在线观看 | 久久久久久综合 | 亚洲激情第一页 | 视频二区 | 久久高清毛片 | 欧美一区二区三区爽大粗免费 | 国产成人天天爽高清视频 | 国产精品久久久久久一区二区三区 | 狠狠爱综合 | 午夜影院免费观看视频 | 91亚洲狠狠婷婷综合久久久 | 日韩成人| 中文字幕一区二区三区四区不卡 | 一级看片 | 一区二区国产精品 | 免费的日批视频 | 久久网国产 | 欧美一级二级三级视频 | 天堂久久爱资源站www | 国产色 | 欧美成人影院在线 | www.欧美日韩 | 国产成人综合av | 国产美女高潮一区二区三区 | 亚洲久久 | 在线观看中文 | 亚洲成人一区二区三区 | 四虎884a | 国产天堂在线 | 亚洲午夜视频在线观看 | 成人 在线 | 欧美成人免费网站 | 国产精品二区三区 | 久久三区 | 久草天堂 | 久热热热 | 成人男女激情免费视频 | 毛片真人毛毛片毛片 | 国产精品久久久久久中文字 | 国产精品久久久久久网站 | 精品人成 | 久久久精彩视频 | 久久99久| 国产精品第一国产精品 | 国产精品精品视频一区二区三区 | 天天干夜操| 国产欧美亚洲精品 | 国产福利视频 | 久久久久一区二区三区 | 久久久香蕉 | 国产成人免费视频网站高清观看视频 | 日日干,天天干 | 久久久久久国产精品 | 亚洲网在线| 亚洲色图一区二区三区 | 日韩成人在线免费视频 | 国产精品一区二区三区在线播放 | 国产午夜精品福利 | 欧美一级在线观看 | 国产精品成人品 | 欧美另类专区 | 婷婷色国产偷v国产偷v小说 | 狠狠干av| 日韩在线视频资源 | 一级片观看 | 精品国产一区二区三区av片 | 日韩亚洲视频在线观看 | 精品国产髙清在线看国产毛片 | 国产精品国产成人国产三级 | 亚洲激情在线 | 成人影音| 日韩中文字幕在线视频 | www.干| www亚洲成人 | 国产精品视频久久 | 一区二区三区回区在观看免费视频 | 免费观看特级毛片 | 国产精品久久久久久久久久ktv | 中文字幕在线第一页 | 国产欧美日韩综合精品一区二区 | 久久99国产精品久久99大师 | www.国产精品| 九九久久精品 | 欧美精品欧美精品系列 | 国产精品久久久久久吹潮 | 国产欧美亚洲精品 | 波多野结衣 一区二区 | 毛片国产| 亚洲成人毛片 | 天天看天天爽 | 亚洲国产精品一区二区第一页 | 一区二区三区视频免费在线观看 | 亚洲欧美日韩在线一区二区 | 成人精品鲁一区一区二区 | 色综合久久天天综合网 | www国产网站| 日韩精品在线免费 | 天天爽夜夜春 | 伊人艹| 成人免费视频网站在线观看 | 国产精品一二三区 | 日韩视频一区二区三区 | 成人在线免费网站 | 欧美日韩国产一区二区三区在线观看 | 自拍偷拍欧美 | 成人在线免费网站 | 欧美xxxx性| 婷婷久久综合 | 欧美一级片在线观看 | 亚洲福利在线播放 | 人人草天天草 | 人人种亚洲 | 久久久久久久久久久久网站 | 女朋友的闺蜜3韩国三级 | 国产高潮呻吟久久渣男片 | 另类久久 | 亚洲一一在线 | 91在线视频免费观看 | 久久一二三区 | 特级淫片女子高清视频在线观看 | 日本丶国产丶欧美色综合 | 中文字幕av一区二区 | 日韩小视频在线播放 | 亚洲欧美日韩另类精品一区二区三区 | 国产精品99 | 久久久麻豆 | 99精品国产在热久久 | 国产成人综合网 | 国产中文视频 | 成年无码av片在线 | 伊人网站 | 精品久久久久久久 | 国产精品久久久久久久久免费 | a级三四级黄大片 | 国产一区91 | 精品久久久久久久久久久久久久 | 不卡黄色 | 在线中文一区 | 91资源在线观看 |