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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

一步步搭建Retrofit+RxJava+MVP网络请求框架(二),个人认为这次封装比较强大了

發布時間:2023/12/20 java 55 豆豆
生活随笔 收集整理的這篇文章主要介紹了 一步步搭建Retrofit+RxJava+MVP网络请求框架(二),个人认为这次封装比较强大了 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在前面已經初步封裝了一個MVP的網絡請求框架,那只是個雛形,還有很多功能不完善,現在進一步進行封裝。添加了網絡請求時的等待框,retrofit中添加了日志打印攔截器,添加了token攔截器,并且對DataManager類進行了擴展,真正體現它的作用,并且對大量的重復代碼做了一定封裝,減少代碼的冗余。

下面結合上篇文章,進行下一步的封裝。

1、首先完善Result.java這個類。

通常在我們寫API接口文檔的時候,后端返回的數據格式都是

"code":1????//1:成功

? ? ? ? ? ? ? ? ?//-1:token驗證失敗

//其他等待

//正數:其它成功值

“msg”:”success”, //返回的消息提示

? ? ? ? ? ?“token驗證失敗”??

“data”:? ?//數據

{

“username”:” xdw” ,? //用戶名

"age":30? //年齡

}

具體的Result.java的代碼如下,里面還加入了一個對返回碼的判斷方法

package com.xdw.retrofitrxmvpdemo.model;import com.xdw.retrofitrxmvpdemo.constant.Constant;/*** Created by 夏德旺 on 2017/12/8.*/public class Result<T> {private int code;private String msg;private T data;public Result(int code, String msg, T data) {this.code = code;this.msg = msg;this.data = data;}//添加對返回狀態成功的判斷public boolean isSuccess() {return code == Constant.SUCCESS;}public int getCode() {return code;}public String getMsg() {return msg;}public T getData() {return data;}}


2、添加ProgressDialogHandler和ProgressCancelListener,用來處理網絡請求等待框。代碼如下

ProgressCancelListener:

package com.xdw.retrofitrxmvpdemo.http;/*** Created by 夏德旺 on 2017/12/8.*/ public interface ProgressCancelListener {void onCancelProgress(); }
ProgressDialogHandler:

package com.xdw.retrofitrxmvpdemo.http;import android.app.ProgressDialog; import android.content.Context; import android.content.DialogInterface; import android.os.Handler; import android.os.Message;/*** Created by 夏德旺 on 2017/12/8.*/ public class ProgressDialogHandler extends Handler {public static final int SHOW_PROGRESS_DIALOG = 1;public static final int DISMISS_PROGRESS_DIALOG = 2;private ProgressDialog pd;private Context context;private boolean cancelable;private boolean show;private ProgressCancelListener mProgressCancelListener;public ProgressDialogHandler(Context context, ProgressCancelListener mProgressCancelListener,boolean cancelable,boolean show) {super();this.context = context;this.mProgressCancelListener = mProgressCancelListener;this.cancelable = cancelable;this.show = show;}private void initProgressDialog(){if (pd == null) {pd = new ProgressDialog(context);pd.setCancelable(cancelable);if (cancelable) {pd.setOnCancelListener(new DialogInterface.OnCancelListener() {@Overridepublic void onCancel(DialogInterface dialogInterface) {mProgressCancelListener.onCancelProgress();}});}if (!pd.isShowing()&&show) {pd.show();}}}private void dismissProgressDialog(){if (pd != null) {pd.dismiss();pd = null;}}@Overridepublic void handleMessage(Message msg) {switch (msg.what) {case SHOW_PROGRESS_DIALOG:initProgressDialog();break;case DISMISS_PROGRESS_DIALOG:dismissProgressDialog();break;}}}

3、改寫RetrofitApiService,將返回結果由原來的UserInfo改為Result<UserInfo>。

public interface RetrofitApiService {@GET("user")Observable<Result<UserInfo>> getUserInfo(@Query("uid") int uid);}
4、完善之前的RetrofitUtil,加入日志與token攔截器,token這段我注釋掉了,根據自己的實際項目進行添加

package com.xdw.retrofitrxmvpdemo.http;import android.content.Context;import com.google.gson.GsonBuilder; import com.xdw.retrofitrxmvpdemo.BuildConfig; import com.xdw.retrofitrxmvpdemo.constant.UrlConstant;import java.io.IOException;import okhttp3.Interceptor; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; import okhttp3.logging.HttpLoggingInterceptor; import retrofit2.Retrofit; import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory; import retrofit2.converter.gson.GsonConverterFactory;/*** Created by 夏德旺 on 2017/12/8.*/public class RetrofitUtil {private Context mCntext;//聲明Retrofit對象private Retrofit mRetrofit;//聲明RetrofitApiService對象private RetrofitApiService retrofitApiService;GsonConverterFactory factory = GsonConverterFactory.create(new GsonBuilder().create());//由于該對象會被頻繁調用,采用單例模式,下面是一種線程安全模式的單例寫法private volatile static RetrofitUtil instance;public static RetrofitUtil getInstance(Context context){if (instance == null) {synchronized (RetrofitUtil.class) {if (instance == null) {instance = new RetrofitUtil(context);}}}return instance;}private RetrofitUtil(Context mContext){mCntext = mContext;init();}//初始化Retrofitprivate void init() {//添加token攔截 /* final String token = AppSPUtils.getValueFromPrefrences(AppConstants.SP_TOKEN, "");final int uid = AppSPUtils.getValueFromPrefrences(AppConstants.SP_USERID, 0);Interceptor mTokenInterceptor = new Interceptor() {@Overridepublic Response intercept(Chain chain) throws IOException {Request authorised = chain.request().newBuilder().addHeader("userId", String.valueOf(uid)).addHeader("token", token).build();return chain.proceed(authorised);}};*///打印請求log日志OkHttpClient httpClient = new OkHttpClient();if (BuildConfig.DEBUG) {HttpLoggingInterceptor httpLoggingInterceptor = new HttpLoggingInterceptor();httpLoggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);httpClient = new OkHttpClient.Builder().addInterceptor(httpLoggingInterceptor) // .addInterceptor(mTokenInterceptor).build();}mRetrofit = new Retrofit.Builder().baseUrl(UrlConstant.BASE_URL).client(httpClient).addConverterFactory(factory).addCallAdapterFactory(RxJavaCallAdapterFactory.create()).build();retrofitApiService = mRetrofit.create(RetrofitApiService.class);}public RetrofitApiService getRetrofitApiService(){return retrofitApiService;} }


5、重要的地方來了,完善之前的DataManager。之前這個類大家可以覺得非常雞肋,因為它什么也沒干,就是把RetrofitApiService和RetrofitUtil 該干的活移動到了這類中,非但沒有減輕任務量,反而要多寫一大堆重復代碼。等現在封裝之后就可以發現它的大作用了。

我們現在在RetrofitApiService中的getUserInfo方法的返回值變成了Result<UserInfo>,但是實際上最后我們要的數據僅僅是UserInfo,這時可以對之前的DataManager中的getUserInfo方法修改下,如下

public Observable<UserInfo> getUserInfo(int uid){return mRetrofitService.getUserInfo(uid).map(new ResultFunc<UserInfo>() );}
這里使用了rxjava中的map這個關鍵方法將數據進行了剝離出來,不懂這個方法的請自己去查閱rxjava的資料。

在DataManager中同時定義了一個內部類,如下

public class ResultFunc<T> implements Func1<Result<T>, T> {@Overridepublic T call(Result<T> result) {//在這里對對服務端返回的resultCode進行判斷,如果返回碼不是成功,// 則拋出自定義的API異常,比如token登陸失敗時。拋出異常的異常可以統一// 在Subscriber的子類ProgressSubscriber中進行處理,這樣就不用到// 每個Activity中再來進行處理if (!result.isSuccess()) {throw new APIException(result.getCode(), result.getMsg());}return result.getData();}}
這里補充自己定義的一個異常類APIException的代碼,如下

package com.xdw.retrofitrxmvpdemo.util;/*** 自定義異常* Created by 夏德旺 on 2017/12/8.*/ public class APIException extends RuntimeException{public int code;public String message;public APIException(int code, String message) {this.code = code;this.message = message;}@Overridepublic String getMessage() {return message;}public int getCode() {return code;} }
DataManager的封裝到此完成,具體它的應用請看后面的UserInfoPresenter中的調用


6、在BasePresenter中添加一個addSubscription方法,這個是對每次的訂閱進行封裝,簡化重復代碼量

//將每次的訂閱操作進行封裝,簡化重復代碼量public <T> void addSubscription(Observable<T> o, Subscriber<T> s) {mCompositeSubscription.add(o.unsubscribeOn(Schedulers.io()).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(s));}

7、再來看看具體處理業務邏輯的UserInfoPresenter的代碼是不是會清爽很多

package com.xdw.retrofitrxmvpdemo.presenter;import android.content.Context; import android.util.Log;import com.xdw.retrofitrxmvpdemo.http.ProgressSubscriber; import com.xdw.retrofitrxmvpdemo.manager.DataManager; import com.xdw.retrofitrxmvpdemo.model.Result; import com.xdw.retrofitrxmvpdemo.model.UserInfo; import com.xdw.retrofitrxmvpdemo.pv.PresentView; import com.xdw.retrofitrxmvpdemo.pv.UserInfoPv;import rx.Observable; import rx.Observer; import rx.Subscriber; import rx.android.schedulers.AndroidSchedulers; import rx.functions.Func1; import rx.schedulers.Schedulers;/*** Created by 夏德旺 on 2017/12/8.*///該類是具體業務presenter,如需增加另一個業務,比如Order //則可以再創建一個OrderPresenter public class UserInfoPresenter extends BasePresenter {private Context mContext;private UserInfoPv mUserInfoPv;private UserInfo mUserInfo;public UserInfoPresenter(Context context) {this.mContext = context;}@Overridepublic void BindPresentView(PresentView presentView) {mUserInfoPv = (UserInfoPv) presentView;}//在presenter中實現業務邏輯,此處會調用前面封裝好的retrofit的東西//將處理結果綁定到對應的PresentView實例,這樣Activity和PresentView實例綁定好之后,//Activity->PresentView->Presenter->retrofit的關系就打通了public void getUserInfo(int uid) {Observable<UserInfo> observable = DataManager.getInstance(mContext).getUserInfo(uid);addSubscription(observable,new ProgressSubscriber<UserInfo>(mUserInfoPv, mContext, true) {@Overridepublic void onNext(UserInfo userInfo) {super.onNext(userInfo);mUserInfoPv.onSuccess(userInfo);}} );} }


這個getUserInfo是不是清爽了很多,首先通過DataManager的封裝,可以很方便的獲取剝離出了核心數據的observable,然后調用父類中的addSubscription來處理具體的業務。大家看到這里會發現業務邏輯中的onCompleted與onError這2個核心方法怎么不見了。這些我們都統一封裝到了ProgressSubscriber中。繼續往下看


8、封裝ProgressSubscriber,它繼承Subscriber類,并且實現ProgressCancelListener接口。在該類中統一對報錯(并且包括自定義的API異常)和網絡對話框的出現與消失做了處理。這樣就簡化了我們大量的操作,不用再到每個界面中單獨對其進行判斷處理。具體代碼如下


package com.xdw.retrofitrxmvpdemo.http; import android.content.Context; import android.util.Log; import android.widget.Toast;import com.xdw.retrofitrxmvpdemo.pv.PresentView; import com.xdw.retrofitrxmvpdemo.util.APIException;import java.net.ConnectException; import java.net.SocketTimeoutException;import rx.Subscriber;/*** 用于在Http請求開始時,自動顯示一個ProgressDialog* 在Http請求結束時,關閉ProgressDialog* 調用者自己對請求數據進行處理* Created by 夏德旺 on 2017/12/8.*/ public class ProgressSubscriber<T> extends Subscriber<T> implements ProgressCancelListener{private PresentView mPresentView;private ProgressDialogHandler mProgressDialogHandler;private Context context;public ProgressSubscriber(PresentView mPresentView, Context context, boolean show) {this.mPresentView = mPresentView;this.context = context;mProgressDialogHandler = new ProgressDialogHandler(context, this, true,show);}public ProgressSubscriber(Context context,boolean show) {this.context = context;mProgressDialogHandler = new ProgressDialogHandler(context, this, true,show);}private void showProgressDialog(){if (mProgressDialogHandler != null) {mProgressDialogHandler.obtainMessage(ProgressDialogHandler.SHOW_PROGRESS_DIALOG).sendToTarget();}}private void dismissProgressDialog(){if (mProgressDialogHandler != null) {mProgressDialogHandler.obtainMessage(ProgressDialogHandler.DISMISS_PROGRESS_DIALOG).sendToTarget();mProgressDialogHandler = null;}}/*** 訂閱開始時調用* 顯示ProgressDialog*/@Overridepublic void onStart() {showProgressDialog();}/*** 完成,隱藏ProgressDialog*/@Overridepublic void onCompleted() {dismissProgressDialog();}/*** 對錯誤進行統一處理* 隱藏ProgressDialog* @param e*/@Overridepublic void onError(Throwable e) {if (e instanceof SocketTimeoutException) {Toast.makeText(context,"網絡中斷,請檢查您的網絡狀態",Toast.LENGTH_SHORT).show();} else if (e instanceof ConnectException) {Toast.makeText(context,"網絡中斷,請檢查您的網絡狀態",Toast.LENGTH_SHORT).show();} else if(e instanceof APIException){Toast.makeText(context,e.getMessage(),Toast.LENGTH_SHORT).show();Log.e("xdw","apiCode="+((APIException) e).getCode());}else{Toast.makeText(context,"未知異常",Toast.LENGTH_SHORT).show();Log.e("xdw","apiCode="+((APIException) e).getCode());}dismissProgressDialog();}/*** 將onNext方法中的返回結果交給Activity或Fragment自己處理** @param t 創建Subscriber時的泛型類型*/@Overridepublic void onNext(T t) {}/*** 取消ProgressDialog的時候,取消對observable的訂閱,同時也取消了http請求*/@Overridepublic void onCancelProgress() {if (!this.isUnsubscribed()) {this.unsubscribe();}} }

9、由于已經對錯誤進行了統一處理,那么這里在PresentView接口中去掉了之前定義的onError方法。

package com.xdw.retrofitrxmvpdemo.pv;/*** Created by 夏德旺 on 2017/12/8.*/public interface PresentView{//定義一個最基礎的接口,里面就包含一個出錯信息的回調//因為大多數時候報錯的時候都是采用一條信息提示//如果需要負責的報錯接口,請重載onError,是重載不是重寫//經過后面加入第二次封裝之后,這里的onError刪除了,統一封裝到了ProgressSubscriber中//如果需要特定的具體要到每個Activity中去重寫報錯信息的,可以在此再添加一個onError處理 }

10、最后我們來看看MainActivity中的處理,基本和之前沒什么變化,就是少了個onError的方法

package com.xdw.retrofitrxmvpdemo.activity;import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView;import com.xdw.retrofitrxmvpdemo.R; import com.xdw.retrofitrxmvpdemo.model.UserInfo; import com.xdw.retrofitrxmvpdemo.presenter.UserInfoPresenter; import com.xdw.retrofitrxmvpdemo.pv.UserInfoPv;public class MainActivity extends AppCompatActivity {private TextView text;private Button button;//定義需要調用的presenter對象private UserInfoPresenter mUserInfoPresenter =new UserInfoPresenter(this);@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);text = (TextView)findViewById(R.id.text);button = (Button)findViewById(R.id.button);//在Activity創建的時候同時初始化presenter,這里onCreater不是指的創建presenter對象,// 而是做一些presenter的初始化操作,名字應該取名init更好理解點,我這里就不重命名了mUserInfoPresenter.onCreate();//將presenter和PresentView進行綁定,實際上就是將presenter和Activity視圖綁定,//這個是MVP模式中V與P交互的關鍵mUserInfoPresenter.BindPresentView(mUserInfoPv);button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {//點擊按鈕觸發presenter里面的方法mUserInfoPresenter.getUserInfo(1);}});}//采用內部類方法定義presentView對象,該對象用來將Activity和presenter進行綁定//綁定了以后主線程中就可以通過回調來獲取網絡請求的數據private UserInfoPv mUserInfoPv = new UserInfoPv(){@Overridepublic void onSuccess(UserInfo userInfo) {text.setText(userInfo.toString());}};//在Activity銷毀的時候,一定要對CompositeSubscription進行釋放,否則會造成內存泄漏//釋放操作封裝到了presenter的ondestroy方法中@Overrideprotected void onDestroy(){super.onDestroy();mUserInfoPresenter.onDestroy();} }
到此整個封裝完畢,我也用自己之前做的項目檢驗了下,確實也很好用。下面跟上篇博客一樣介紹下使用方法。


列舉下之后像該項目中擴展業務的步驟,比如加一個訂單功能。


操作步驟:


1、添加對應的model類Order


2、RetrofitApiService中添加對應的網絡請求api,此時的api格式是帶上Result的


3、將新添加的api映射到DataManager中,此時在DataManager中的api是剝離出實際數據之后的


4、添加業務對應的PrensentView實例OrderPv


5、添加業務對應的Presenter實例OrderPresenter


6、在需要該業務的UI線程(Activity或Fragment)中調用具體業務對應的Presenter



其實操作步驟沒有太大變化,但是將返回結果換成了統一的數據格式,加入了返回碼和返回消息,方便客戶端對錯誤進行統一處理。同時添加了log與token的攔截器,并且簡化了RxJava相關的代碼操作。至此,一個完整的MVP框架封裝完成。

總結

以上是生活随笔為你收集整理的一步步搭建Retrofit+RxJava+MVP网络请求框架(二),个人认为这次封装比较强大了的全部內容,希望文章能夠幫你解決所遇到的問題。

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

最近乱久中文字幕 | 国产美女永久免费 | 欧美成年网站 | 久草在线最新 | 又色又爽又激情的59视频 | 久久久久久久影院 | 久久久精品视频成人 | 狠狠干成人 | 久久国产一区二区 | 欧美激情视频一区二区三区免费 | a资源在线| 色综合久久久久综合体 | 特级a毛片 | 亚洲网久久 | 精品久久在线 | 欧美91精品久久久久国产性生爱 | 日日爱av | 92国产精品久久久久首页 | 久久蜜臀av | 天天五月天色 | 亚洲一区免费在线 | 81精品国产乱码久久久久久 | 久久精品直播 | 中文在线免费观看 | 久久久久综合视频 | 在线精品播放 | a黄色| 午夜影视一区 | 欧美小视频在线观看 | 日本中文一级片 | 国产精品高清在线 | 最近免费观看的电影完整版 | 国产精国产精品 | 日韩成人中文字幕 | 国产精品视频在线观看 | 久久久精品国产一区二区三区 | 中文字幕国产一区 | 亚洲一区尤物 | 99精品热视频只有精品10 | 欧美精品999 | 婷婷色av| 欧美色图一区 | 国产成人久久精品亚洲 | 久久国产精品一区二区三区 | 亚洲 综合 精品 | 午夜婷婷综合 | 99久久综合精品五月天 | 久久国产精品一区二区三区 | 色狠狠综合天天综合综合 | 韩国一区视频 | 黄色的视频 | 久久精品99久久 | 人人爽人人爽人人爽学生一级 | 97超碰站| 黄色小说视频在线 | 人人超碰在线 | 久操视频在线观看 | 91成人精品一区在线播放69 | 日日摸日日 | 日本性生活免费看 | av中文字幕免费在线观看 | 日日夜夜中文字幕 | 亚洲一区久久久 | 亚洲综合网站在线观看 | www日韩在线观看 | 国精产品999国精产品视频 | 天天干,天天射,天天操,天天摸 | 视频在线观看国产 | 激情网色 | 国产日产精品一区二区三区四区的观看方式 | 国产韩国日本高清视频 | 97香蕉久久超级碰碰高清版 | 国产一区网 | 欧美性脚交 | 日日干天天操 | 欧美精品久久久久 | 久久免费电影 | 国产视频综合在线 | 天天做综合网 | 成人国产精品久久久久久亚洲 | 日本久久久久久科技有限公司 | 99精品久久久 | 四月婷婷在线观看 | 成人h电影 | 香蕉免费在线 | 国产区在线看 | 97热久久免费频精品99 | 国产亚洲精品福利 | 五月精品| 国产精品麻豆果冻传媒在线播放 | 狠狠色狠狠综合久久 | 亚洲免费观看视频 | 99麻豆久久久国产精品免费 | 亚洲视频免费 | 日韩欧美在线综合网 | 国产精品黄色av | 国产资源站 | 97精品超碰一区二区三区 | 伊人婷婷在线 | 一区二区在线影院 | 亚洲精品一区二区18漫画 | 日韩在观看线 | 中文字幕av免费观看 | 91视频91自拍 | 国产区久久 | 亚洲资源在线网 | 99色在线播放 | 五月天国产精品 | 国产资源网 | 国产不卡片 | 亚洲欧美经典 | 欧美黄色成人 | 久青草影院 | 精品国产精品一区二区夜夜嗨 | 国产黄在线免费观看 | 久久99精品波多结衣一区 | 日一日干一干 | 国产精品毛片久久久久久 | 国产高清日韩欧美 | 在线免费观看的av | 精品美女在线观看 | 91最新视频在线观看 | 久久国语露脸国产精品电影 | 一区二区三区视频在线 | 丰满少妇在线观看网站 | 91精品国产乱码在线观看 | 夜夜夜夜爽 | 色黄www小说 | 国产无套视频 | 99草视频在线观看 | 国产高h视频 | 国内精品福利视频 | 精品久久国产 | 黄色影院在线免费观看 | 久久久久久久久久免费视频 | 成人免费视频a | 欧美日韩一区二区免费在线观看 | 在线精品亚洲一区二区 | 在线 日韩 av| 欧美久久久久 | 午夜在线免费观看 | 九九激情视频 | 亚洲电影久久久 | 99免费国产| 91视频免费网站 | 欧美日性视频 | 欧美日产一区 | 欧美日韩视频精品 | 97精品电影院 | 91av视频导航| 精品电影一区二区 | 欧美在线不卡一区 | 精品久久一区二区三区 | 久久久99精品免费观看app | 日本爱爱免费 | 久久精品79国产精品 | 久久免费在线观看 | 国产中文字幕视频在线观看 | 日日干夜夜爱 | av理论电影 | 中文字幕在线日 | 超碰免费在线公开 | 日日草天天干 | 中文字幕精品在线 | 在线观看精品视频 | 日韩一级片网址 | 亚洲国产日韩av | 91精品久久久久久久久久久久久 | 亚洲男男gaygayxxxgv | 国产视频亚洲视频 | 亚洲欧美视频在线观看 | 国产黄色视 | 久草在线资源观看 | 在线观看免费高清视频大全追剧 | 欧美视屏一区二区 | 国产99久久久国产精品免费二区 | 国产999精品久久久久久绿帽 | 久久久亚洲精华液 | 99久久精品免费看国产 | 亚洲精品成人免费 | 天天综合天天做 | 在线电影日韩 | 国产在线理论片 | 成人一区二区在线 | 黄色国产高清 | 中文字幕色播 | 97视频亚洲 | 国产精品ssss在线亚洲 | 国产免费亚洲高清 | 香蕉在线播放 | 国产乱码精品一区二区三区介绍 | 国产一区二区三区黄 | 97av视频 | 日韩精品视频在线观看免费 | 99这里都是精品 | 亚洲欧洲av| 插婷婷 | 久久香蕉一区 | 中国美女一级看片 | 在线a亚洲视频播放在线观看 | 欧美日韩中文字幕视频 | 香蕉网在线观看 | 国产色婷婷精品综合在线手机播放 | 一区二区在线不卡 | 久草在| 午夜日b视频 | 天天色天天骑天天射 | 久久久久国产精品午夜一区 | 久久这里只有精品9 | 国产精品毛片久久久 | 狠狠躁日日躁狂躁夜夜躁 | 久久久久久久久影视 | 免费黄色a级毛片 | 久久精品视频免费播放 | 色黄视频免费观看 | 亚洲乱码中文字幕综合 | 91色在线观看视频 | 色综合久久网 | 久久久午夜精品福利内容 | 98涩涩国产露脸精品国产网 | 亚洲人成网站精品片在线观看 | 波多野结衣精品在线 | 黄色毛片网站在线观看 | 99婷婷| 97福利在线 | 中文字幕在线观看第二页 | 日韩在线免费视频 | 国内精品久久久久影院日本资源 | 99热网站| 欧美激情视频一区 | 久久精品91久久久久久再现 | 欧美日韩午夜在线 | 国产人成在线视频 | 欧美精选一区二区三区 | 亚洲精品在线观看网站 | 91在线成人 | av电影在线免费观看 | 亚洲闷骚少妇在线观看网站 | 国产日产精品一区二区三区四区的观看方式 | 中文视频一区二区 | 999精品网 | 日韩免费观看视频 | 五月天婷婷在线视频 | 最近中文字幕视频完整版 | 正在播放五月婷婷狠狠干 | 欧美成人影音 | 91人人视频在线观看 | 久久久久久久久久久久久影院 | 美女久久久久 | 日日操天天操夜夜操 | 女人18精品一区二区三区 | 中文资源在线播放 | 日本黄色大片免费看 | 日韩在线观看视频一区二区三区 | 久久99亚洲网美利坚合众国 | av中文字幕在线观看网站 | 国产98色在线 | 日韩 | 国产xxxx做受性欧美88 | 99热这里精品 | 中文字幕乱码在线播放 | 久久久www成人免费毛片麻豆 | 最近中文字幕大全中文字幕免费 | 久久婷婷精品视频 | 中文字幕在线观看免费观看 | 51久久夜色精品国产麻豆 | 免费看的黄色 | 日韩av电影一区 | 狠狠操狠狠干天天操 | 国产精品一区二区在线观看免费 | 九九免费在线看完整版 | 欧美最猛性xxxxx免费 | 国产成人精品久久久 | 男女全黄一级一级高潮免费看 | 国产1区2区 | 亚洲免费视频在线观看 | 欧洲精品久久久久毛片完整版 | 9992tv成人免费看片 | 国产成人av一区二区三区在线观看 | 97操碰 | 五月天久久久久久 | 国产精品欧美在线 | 亚洲国内在线 | 亚洲精品玖玖玖av在线看 | 一区二区三区精品在线视频 | 国产午夜一级毛片 | 国产一区视频在线观看免费 | 精品国产精品国产偷麻豆 | 久久精品91视频 | 国产做爰视频 | 成 人 黄 色 视频播放1 | 亚洲国产97在线精品一区 | 人人爱人人射 | 精品国产一区二区三区在线 | 婷婷综合影院 | 99久久精品免费看国产免费软件 | 日韩欧美aaa| 色网站国产精品 | 久久久国产一区二区 | 天天干,天天插 | 亚洲免费精品一区二区 | 久久精品99国产国产 | 色婷婷激情电影 | 国产资源免费在线观看 | 国产在线观看一 | 成人在线观看免费 | 久久久久影视 | 国产精品99久久久精品 | 97精品国产91久久久久久久 | 在线三级中文 | 国产精品一区免费观看 | 日韩久久久久久久 | 黄色片视频在线观看 | 久久婷婷综合激情 | 国产亚洲精品v | 精品国产久| 亚洲 欧美日韩 国产 中文 | 亚洲欧洲国产视频 | 久久综合色天天久久综合图片 | 色婷婷啪啪免费在线电影观看 | 久久免费一级片 | av在线亚洲天堂 | 日韩r级电影在线观看 | 人人玩人人添人人 | 久久免费国产精品 | 欧美色图东方 | 国产精品密入口果冻 | 国内精品美女在线观看 | 国产精品粉嫩 | 国产精品私拍 | 国产精品九九九九九 | 日韩电影精品 | 国内免费久久久久久久久久久 | 高潮久久久久久 | 热99久久精品 | 在线观看黄色小视频 | 全久久久久久久久久久电影 | 亚洲精品日韩av | 久久久亚洲电影 | 欧美孕妇与黑人孕交 | 免费看成人a| 伊人www22综合色 | 超碰免费av | 久久久久久国产精品美女 | 国产成人精品一区二区三区在线 | 天天插视频| 国产成人在线看 | 日韩二区三区在线观看 | 蜜臀久久99精品久久久久久网站 | 国产天天综合 | 国产精彩视频一区二区 | 超碰在线公开 | 婷婷www | 99久久er热在这里只有精品66 | 日韩精品一区电影 | 中文字幕在线播放第一页 | 免费看的黄色片 | 九九日九九操 | 国产免费资源 | 91福利区一区二区三区 | 婷婷激情站 | 99在线观看免费视频精品观看 | 午夜精品久久久久久99热明星 | 欧美视频在线二区 | 成人看片 | 黄色精品一区二区 | 亚洲精品一区二区三区在线观看 | 国产资源免费 | 欧美福利视频一区 | 午夜视频一区二区 | 国产精品一区二区三区在线播放 | 久久久精品福利视频 | 亚洲国产69 | 精品免费国产一区二区三区四区 | 亚洲一区久久久 | 久草视频视频在线播放 | 国产剧情久久 | 亚洲人天堂| 中文字幕中文字幕在线中文字幕三区 | 涩av在线| 免费美女久久99 | 欧美少妇bbwhd | 欧美日韩高清不卡 | 在线天堂中文在线资源网 | 亚洲国产精品一区二区久久,亚洲午夜 | 国产精品中文字幕在线观看 | 欧美狠狠色 | 韩国一区二区在线观看 | 亚洲精品91天天久久人人 | 精品国产aⅴ麻豆 | 少妇bbw搡bbbb搡bbbb | 成人免费观看在线视频 | 日韩精品国产一区 | 99视频免费看 | 亚洲国产免费网站 | 在线视频 影院 | 国产中文字幕在线免费观看 | 丁香花在线视频观看免费 | 色综合久久综合 | 亚洲免费av一区二区 | 午夜av不卡 | 久久超 | 丁香综合av | a黄色一级片| 国产亚洲日本 | 一区二区三高清 | 精品久久国产一区 | 24小时日本在线www免费的 | 九九色网 | 美女黄濒| 亚洲精品免费在线播放 | 成人国产网站 | 国产精品久久久久久久免费观看 | 热久久99这里有精品 | 久久国产精品精品国产色婷婷 | 在线看岛国av | 麻豆免费视频 | 国产精品99久久久久久人免费 | 亚洲精品美女视频 | 日本午夜在线亚洲.国产 | 人交video另类hd | 97人人爽 | 五月激情久久久 | 91免费网站在线观看 | 欧亚日韩精品一区二区在线 | 久久久综合 | 视频在线观看亚洲 | 美女激情影院 | 日韩欧美在线视频一区二区三区 | 色天天综合久久久久综合片 | 久久久国产精品人人片99精片欧美一 | 亚洲一区二区三区在线看 | 精品一区二区在线播放 | 一区二区视频播放 | 欧美不卡视频在线 | 一级片观看| 国产一区国产二区在线观看 | 日韩理论| 综合天堂av久久久久久久 | 日韩av在线资源 | 日韩综合第一页 | 久久字幕精品一区 | 91福利区一区二区三区 | 十八岁免进欧美 | 国产97视频在线 | 久久久这里有精品 | 免费观看特级毛片 | 欧美在线观看视频 | 免费在线观看a v | 欧美日韩免费一区二区 | 黄色亚洲在线 | 中文字幕高清av | 精品久久久久久久久久久久久久久久久久 | 免费网站黄 | 日韩激情视频在线 | 天天操天天射天天 | 国产原厂视频在线观看 | 色婷五月 | 免费大片黄在线 | 国产成人精品三级 | 91一区一区三区 | av在线播放一区二区三区 | 久久综合射 | 美女黄视频免费看 | 99视频在线观看免费 | 激情五月色播五月 | 中国一级片视频 | 91精品国产麻豆国产自产影视 | 日韩av电影网站在线观看 | 在线 国产 亚洲 欧美 | 中文字幕在线观看视频一区二区三区 | 91最新在线观看 | 激情综合色综合久久综合 | 色婷婷国产精品一区在线观看 | 久久国产精品免费看 | 久久精品人人做人人综合老师 | 日韩精品视频免费在线观看 | 国产精品一区二区久久精品爱微奶 | 丁香五婷| 免费在线色 | 亚洲欧美视频 | 91福利社区在线观看 | 亚洲高清视频在线观看免费 | 亚洲视频在线观看免费 | 免费www视频| 热99久久精品 | 91av中文字幕 | av一二三区| 日韩欧美一区二区不卡 | 日韩激情小视频 | 日韩午夜视频在线观看 | 亚洲精品在线观看av | 久久久精品一区二区 | 日韩久久久久久久久久久久 | 在线а√天堂中文官网 | 免费看片成年人 | 色综合天天狠天天透天天伊人 | 久久国产网站 | 久久精品4 | 久久精品9 | www.狠狠色| 黄色国产高清 | 亚洲乱亚洲乱亚洲 | 99久久er热在这里只有精品66 | 在线观看av中文字幕 | 国产精品久久久久久久久搜平片 | 久草手机视频 | 中国一级片在线播放 | 免费看三级网站 | 天躁狠狠躁| 亚洲精品网站 | 国产精品乱码一区二区视频 | 久久久精品二区 | 久久三级毛片 | 在线观看一二三区 | 日日夜夜干 | 免费看黄网站在线 | 日韩av电影网站在线观看 | 最新午夜电影 | 久久香蕉影视 | 国产精品白丝jk白祙 | 四虎影视久久久 | 中文字幕免费一区二区 | 91成人精品一区在线播放69 | 亚洲精品视频偷拍 | 韩日成人av | 伊人国产视频 | 免费在线成人 | 久草av在线播放 | 中文字幕在线播放第一页 | 超碰在线公开 | 婷婷5月激情5月 | 日韩亚洲欧美中文字幕 | 在线观看免费成人av | 蜜桃传媒一区二区 | 日韩av女优视频 | 成人免费xyz网站 | av片在线观看 | 国产精品久久久久久久av电影 | 97人人人人 | 99精品免费久久久久久日本 | 亚洲综合色av | 黄色三级av | 成人一级在线观看 | 国产一级不卡毛片 | 亚洲国产成人av网 | 日韩一区二区免费播放 | 天天干天天天 | 蜜臀av在线一区二区三区 | www免费 | 麻豆久久精品 | 91资源在线播放 | 国偷自产视频一区二区久 | 99视频国产精品 | 欧美性色综合网 | 亚洲精品啊啊啊 | 国产精品 欧美 日韩 | 97av在线视频免费播放 | 青青河边草观看完整版高清 | 国产精品2018| 成人9ⅰ免费影视网站 | 国产精品网址在线观看 | 国产精品99在线播放 | 成人免费在线视频 | 欧美日韩在线精品一区二区 | 国产精品视频地址 | 夜夜骑日日操 | 欧美九九九 | 久久人人爽人人爽人人 | 亚洲综合婷婷 | 久久色在线播放 | 国产精品一区二区在线观看免费 | 久久不见久久见免费影院 | 在线成人性视频 | 色综合天天色综合 | 日本三级在线观看中文字 | 国产精品久久久久久久久久不蜜月 | 欧美日韩在线播放一区 | 97超碰在线资源 | 久久一二区 | 91在线区 | 九九有精品 | 亚洲欧美日韩精品久久奇米一区 | 青青网视频 | 一区二区三区在线不卡 | 国产一二区免费视频 | 天天干天天碰 | 99热精品免费观看 | 久久久精品一区二区三区 | 免费在线h| 91在线看网站| 国产精品午夜在线观看 | 国产一区成人在线 | va视频在线观看 | 国产欧美精品一区aⅴ影院 99视频国产精品免费观看 | 少妇性bbb搡bbb爽爽爽欧美 | 人人澡人人舔 | 丁香婷婷基地 | 久久一区国产 | 亚洲片在线 | 久久国产精品久久精品国产演员表 | 国产日韩欧美在线免费观看 | 天天夜夜狠狠操 | 国产一线天在线观看 | 91精品国产成人观看 | 91久久国产综合精品女同国语 | 成人在线视频免费 | 欧美激情综合色综合啪啪五月 | 成人久久免费视频 | 久久精品8 | 亚洲成人精品在线观看 | 国产精品v欧美精品 | 亚洲aⅴ免费在线观看 | 亚洲无吗av| 日日碰夜夜爽 | 最新日韩在线观看视频 | 久久久久久久久久久久久国产精品 | 日本久久久影视 | 91精品视频网站 | www色片 | 51久久夜色精品国产麻豆 | 91久久一区二区 | 九九热.com | 亚洲五月六月 | 天天爱天天插 | 中文字幕二区三区 | 一级免费黄视频 | 综合久久久久久 | 日本少妇久久久 | 狠狠色狠狠色综合日日小说 | 91经典在线 | 久久国产区 | 天天干 夜夜操 | 黄色网址中文字幕 | 久久超级碰视频 | 国产视频1 | 亚洲精品456在线播放乱码 | 日b黄色片| 国产精品美女 | 色av婷婷 | 色网站免费在线看 | 国产午夜av | 探花视频在线观看免费版 | 99中文在线 | 欧美成人亚洲 | 国产成人专区 | 97电影网手机版 | 2021国产精品 | 999成人网 | 成人综合免费 | 国产999精品 | 国内精品久久久久影院男同志 | 草久在线 | 99国产精品久久久久老师 | 亚洲四虎影院 | 日韩中文字幕在线观看 | 日本中文字幕在线看 | 婷婷在线资源 | 免费网址你懂的 | 六月色丁| 手机在线小视频 | 综合网色 | 免费视频久久久久 | 亚洲精品麻豆视频 | 国产精品九九视频 | 国产精品成人在线 | 韩日电影在线 | 国产中文欧美日韩在线 | 久久 在线 | 免费黄色网止 | 黄色小说免费在线观看 | 国产一区二区手机在线观看 | 狠狠色丁香婷婷综合欧美 | 亚洲人片在线观看 | 97高清视频 | 人人澡超碰碰 | 五月天综合激情网 | 在线观看激情av | 天天综合色天天综合 | 亚洲精品在线免费观看视频 | 国产成人一区二区三区久久精品 | 5月丁香婷婷综合 | 日韩久久久 | 日韩av不卡在线观看 | 99久久99久久精品国产片果冰 | 国产精品一区二区免费视频 | 日日射天天射 | 欧美成人va| 亚洲另类视频在线观看 | 中文字幕在线观看免费观看 | 色网站中文字幕 | 九九激情视频 | 天天干天天操天天 | 麻豆网站免费观看 | 九九久久久久久久久激情 | 日韩精品一区二区三区丰满 | 日韩在线观看一区 | 国产精品一区二区精品视频免费看 | 色综合天天综合 | 久草视频在线新免费 | 欧美一区二区三区在线看 | 99电影456麻豆 | 国产精品乱码久久久久 | 亚洲精品乱码久久久久久蜜桃不爽 | 欧美人牲 | 在线黄色国产 | 成人免费观看av | 成人中文字幕在线 | 国内三级在线 | 久久亚洲影视 | 国产成人精品一区一区一区 | 国产精品美女久久久久久2018 | www.久久久精品 | 色欧美88888久久久久久影院 | 在线看片日韩 | 精品国产欧美一区二区 | 亚洲涩涩涩 | 中文字幕一区二区三区在线观看 | 中文字幕一区二区三区四区久久 | 97人人网| 国产精品久久久久9999 | 亚洲第一区精品 | 欧美人体xx| 日本在线观看黄色 | 国产精品原创视频 | 欧美a级成人淫片免费看 | 天天做天天爱天天爽综合网 | 五月天高清欧美mv | 波多野结衣亚洲一区二区 | 欧美激情综合五月色丁香小说 | 天天综合色网 | av不卡免费看| 亚洲免费资源 | 国产毛片久久久 | 精品国产中文字幕 | 国产黄色网 | 欧美日韩一区二区视频在线观看 | 精品国产一区二区三区久久久久久 | 777xxx欧美| 亚洲国产中文字幕 | 伊人中文网 | 五月视频| 成人97视频一区二区 | 国产一级精品在线观看 | 亚洲欧美视屏 | 日韩簧片在线观看 | 国产96在线| 99 久久久久 | 久久精彩 | 开心激情久久 | 国产福利中文字幕 | 国产黄网在线 | 成人影音在线 | 在线电影91 | 国产在线免费观看 | 久热色超碰 | 久久精品日韩 | 久久伊人精品天天 | 国产精品视频最多的网站 | 黄色一级大片在线免费看产 | 欧美成年性 | 2023天天干 | 国产精品一区二区果冻传媒 | 亚洲一区二区三区四区精品 | 天天干天天拍 | 久久精品国产精品亚洲 | 综合五月婷婷 | 91丨九色丨国产女 | 久久精彩免费视频 | 在线观看精品黄av片免费 | 国产专区欧美专区 | 久久激情精品 | 国产视频一二区 | 国产精品手机视频 | 国产亚洲资源 | 久久夜色精品国产欧美乱极品 | 五月婷婷中文网 | 免费观看一区二区三区视频 | 中文字幕在线观看一区 | av福利网址导航大全 | 亚洲视频,欧洲视频 | 欧美久久久久 | 亚洲精品在线网站 | 午夜婷婷综合 | 日韩午夜在线观看 | 99热只有精品在线观看 | 久久视频免费在线 | 国产成人性色生活片 | 久久综合久久综合这里只有精品 | 久久久国际精品 | 久久天天躁夜夜躁狠狠躁2022 | 在线观看中文字幕av | 五月激情丁香图片 | 亚洲精品国产日韩 | 国产一区二区高清不卡 | 五月综合网站 | 中文字幕在线观看第三页 | 欧美黑人性猛交 | 久久精品一区二区三区视频 | 日韩免费二区 | 国产精品不卡在线播放 | 午夜在线免费观看视频 | 狠狠干婷婷色 | 国产免费xvideos视频入口 | 久久久久久久久久网站 | 欧美精品乱码99久久影院 | 不卡的av在线播放 | 日韩最新在线 | 婷婷久草 | 国产免费一区二区三区最新 | 亚洲欧美日本A∨在线观看 青青河边草观看完整版高清 | 日韩av在线不卡 | 精品伦理一区二区三区 | 天堂网av 在线 | 天堂视频中文在线 | www蜜桃视频 | 999国产在线| 欧美日韩精品影院 | 在线免费黄色片 | 国产成年免费视频 | 国色天香在线观看 | www.色爱| 亚洲国产影院av久久久久 | 99re亚洲国产精品 | 色偷偷网站视频 | 1024在线看片 | 久久免费视频网 | 日日夜夜天天人人 | 亚洲最大成人网4388xx | 久久久精品欧美一区二区免费 | 精品久久久久久亚洲综合网 | 97超碰在线久草超碰在线观看 | 欧美日韩在线观看一区二区三区 | 色婷婷啪啪免费在线电影观看 | 99超碰在线播放 | 午夜黄色大片 | 午夜视频在线瓜伦 | 美女网站视频免费黄 | 国产精品美女网站 | 国产电影一区二区三区四区 | 人人爱在线视频 | 精品视频在线视频 | 中文字幕999 | 超碰在线最新网址 | 国产精品自在欧美一区 | 亚洲精品高清在线观看 | 久久久久国产精品免费 | 免费看国产曰批40分钟 | 91久久精品一区二区三区 | 成人福利av | 午夜国产福利在线观看 | 国产色道 | 国产成人在线播放 | 中字幕视频在线永久在线观看免费 | 欧美日韩一区二区在线观看 | 亚洲精品中文字幕在线 | 91丨九色丨国产丨porny精品 | 久草五月 | 丁香九月婷婷综合 | 国产亚洲人| 日韩v欧美v日本v亚洲v国产v | 日韩免费观看视频 | 欧美日韩电影在线播放 | 中文字幕乱在线伦视频中文字幕乱码在线 | 2023av| 免费福利在线播放 | 欧美成人亚洲 | 黄色软件在线观看 | 久久久久亚洲国产 | 欧美男男tv网站 | 久久久久久久久精 | 操操操夜夜操 | 91在线日本| 91手机视频 | 香蕉视频在线免费 | 天天爱天天干天天爽 | 久久精品欧美一区二区三区麻豆 | 最近中文字幕高清字幕在线视频 | 国内精品久久天天躁人人爽 | 中文字幕在线资源 | 久久久久久国产精品美女 | 国产美女视频黄a视频免费 久久综合九色欧美综合狠狠 | 99精品99 | 亚洲精品h | 国内精品久久久久久久久久清纯 | 久久久人| 日韩精品在线看 | 18岁免费看片 | 97超碰国产精品女人人人爽 | 鲁一鲁影院 | 成人av中文字幕 | 69夜色精品国产69乱 | www.久久久精品 | 日本三级在线观看中文字 | 又黄又爽又无遮挡免费的网站 | 波多野结衣在线视频免费观看 | 中文在线www| 精品国产伦一区二区三区观看体验 | 在线不卡的av | 国产又黄又硬又爽 | 在线影院 国内精品 | 日韩电影一区二区三区 | 最近中文字幕高清字幕免费mv | 91九色性视频 | 91片黄在线观看 | 国产视频丨精品|在线观看 国产精品久久久久久久久久久久午夜 | 超碰九九 | 99热手机在线 | 99精品国产99久久久久久97 | 美女福利视频 | 久久精品96 | 欧美日韩精品影院 | 亚洲视频在线看 | 91自拍视频在线 | 美女网站视频免费都是黄 | 91人人爱 | 国产综合小视频 | 精品视频 | 最新中文字幕在线观看视频 | 国产精品高清免费在线观看 | 天天射天天拍 | 国产免费观看久久 | 日韩精品一区二区三区免费观看 | 国产精品国产精品 | 日韩激情中文字幕 | 中文免费观看 | 亚洲一二三区精品 | 亚洲爱视频 | 香蕉影院在线播放 | 1000部国产精品成人观看 | 大片网站久久 | 97精品国产 | 狠狠的干 | 日韩三级视频 | 插综合网 | 在线成人欧美 | 在线观看视频亚洲 | 91久久久久久久一区二区 | 国产精品久久久区三区天天噜 | 三级在线视频播放 | 日韩三级一区 | 亚洲精品一区二区三区四区高清 | 综合色影院| 亚洲一区网站 | 91九色蝌蚪视频在线 | 中文字幕美女免费在线 | 九色在线 | 国产一级在线观看 | 国产亚洲情侣一区二区无 | 亚洲成人软件 | 中文字幕成人在线观看 | 天天插综合| 国产69精品久久久久99尤 | 亚洲午夜精品久久久久久久久 | 国内精品福利视频 | 色视频 在线| 日韩欧美视频一区 | 国产视频一区在线 | 国产亚洲成人网 | 樱空桃av | 久久亚洲综合色 | 色婷婷电影网 | 免费视频二区 | 国产在线探花 | 中文字幕在线观看完整 | 美女视频是黄的免费观看 | 毛片无卡免费无播放器 | 五月婷婷视频 | 狠狠久久综合 | 久草网站 | 日韩欧美在线综合网 | 探花视频免费观看高清视频 | 精品国产1区2区 | 五月婷婷操 | 在线中文字幕网站 | 欧美精品在线观看免费 | 91视频免费网址 | 亚洲国产美女精品久久久久∴ | 久久久伦理 | 成人99免费视频 | 亚洲精品免费观看视频 | 欧洲精品久久久久毛片完整版 | 亚洲精品视频在线观看免费视频 | 黄色在线看网站 | 色婷婷综合久久久久中文字幕1 | 色婷婷亚洲婷婷 | 中文字幕乱码在线播放 | 国产一级片一区二区三区 | 欧美日韩视频在线播放 | 国产中文字幕在线免费观看 | 欧美男男激情videos | 91完整版在线观看 | 久久九九久久 | 九九精品在线观看 | 天天在线视频色 | 欧美一级性生活视频 | 午夜黄色大片 | 亚洲春色奇米影视 | 午夜精品久久久久久久爽 |