MVP+Retrofit2+Okhttp3
先写一个baseAPI
//存储地址
public class BaseApi {
public static String BaseUrl = "http://www.tv188.com/";
//Retrofit_banner
public static final String Retrofit_Banner = "mobile/listSlides.do";
//Retrofit_login
public static final String Retrofit_Login = "mblogin.do";
}
RetrofitContract
public interface RetrofitContract {
interface View extends BaseView{
void bannerData(List<banner> list);
void bannerDateTwo(List<bannertwo.databean> list);
void usetLogin();
}
abstract class presenter extends BasePresenter<View>{
public abstract void getBannerData();
public abstract void getBannerDataTwo();
public abstract void userLogin(String user,String pwd,String code);
}
}
/**
* Presenter的父类
* */
public abstract class BasePresenter<T> {
public Context context;
//public E mModel;
public T mView;
public BasePresenter(){
}
public void setVM(Context context,T mView){
this.context = context;
//this.mModel = mModel;
this.mView = mView;
}
}
//用来回调接口成功失败
public interface BaseView {
void showMsg(String msg);
void showLoading();
void stopLoading();
//void success(Object o,int type);
void failure();
}
//存放Demo模块,API
public interface RetrofitApi {
/**
* banner 第一种
* */
@GET(BaseApi.Retrofit_Banner)
Observable<BaseEntry<List<banner>>> getBanner();
/**
* 自己尝试 banner
* */
@GET(BaseApi.Retrofit_Banner)
Observable<bannertwo> getBannerTwo();
/**
* 登录
*/
@POST(BaseApi.Retrofit_Login)
Observable<BaseEntry<login>> userLogin(@Body Map<String,String> maps);
}
/**
* Retrofit2+Rxjava2+OKHttp3+RxAndroid网络框架
*/
public class RetrofitActivity extends AppCompatActivity implements RetrofitContract.View {
private RetrofitPresenter presenter;
@BindView(R.id.tv_banner)
TextView tv_banner;
@BindView(R.id.bt_banner)
Button bt_banner;
@BindView(R.id.tv_bannertwo)
TextView tv_bannertwo;
@BindView(R.id.bt_bannertwo)
Button bt_bannertwo;
@BindView(R.id.tv_bannerthree)
TextView tv_bannerthree;
@BindView(R.id.bt_bannerthree)
Button bt_bannerthree;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_retrofit);
ButterKnife.bind(this);
presenter = new RetrofitPresenter();
presenter.setVM(this,this);
init();
}
private void init() {
//获取banner数据
bt_banner.setOnClickListener(v -> {
presenter.getBannerData();
});
//第二种获取banner
bt_bannertwo.setOnClickListener(v -> {
presenter.getBannerDataTwo();
});
//登录
bt_bannerthree.setOnClickListener(v -> {
//登录信息
presenter.userLogin("allen234", "allen234", "111");
});
}
@Override
public void bannerData(List<banner> list) {
tv_banner.setText(list.get(0).getTitle());
}
@Override
public void bannerDateTwo(List<bannertwo.databean> list) {
tv_bannertwo.setText(list.get(1).getTitle());
}
@Override
public void usetLogin() {
}
@Override
public void showMsg(String msg) {
}
@Override
public void showLoading() {
}
@Override
public void stopLoading() {
}
@Override
public void failure() {
}
}
//Retrofit 请求工具类
public class RetrofitUtil<T> {
/**
* 超时时间
*/
private static volatile RetrofitUtil mInstance;
private RetrofitApi allApi;
/**
* 单例封装
*
* @return
*/
public static RetrofitUtil getInstance() {
if (mInstance == null) {
synchronized (RetrofitUtil.class) {
if (mInstance == null) {
mInstance = new RetrofitUtil();
}
}
}
return mInstance;
}
/**
* 初始化Retrofit
*/
public RetrofitApi initRetrofit() {
if (allApi == null) {
Retrofit mRetrofit = new Retrofit.Builder()
.client(MyApplication.initOKHttp())
// 设置请求的域名
.baseUrl(BaseApi.BaseUrl)
// 设置解析转换工厂,用自己定义的
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.build();
allApi = mRetrofit.create(RetrofitApi.class);
}
return allApi;
}
}
public class RetrofitPresenter extends RetrofitContract.presenter {
/**
* 获取banner 第一种
* */
@Override
public void getBannerData() {
RetrofitUtil.getInstance().initRetrofit().getBanner()
.subscribeOn(Schedulers.io())//执行在io线程
.observeOn(AndroidSchedulers.mainThread())//主线程
.subscribe(new Observer<BaseEntry<List<banner>>>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(BaseEntry<List<banner>> value) {
System.out.println(value.getData());
mView.bannerData(value.getData());
}
@Override
public void onError(Throwable e) {
mView.showMsg(e.getMessage());
}
@Override
public void onComplete() {
}
});
}
@Override
public void getBannerDataTwo() {
//第二种
RetrofitUtil.getInstance().initRetrofit().getBannerTwo()
.subscribeOn(Schedulers.io())//执行在io线程
.observeOn(AndroidSchedulers.mainThread())//主线程
.subscribe(new Observer<bannertwo>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(bannertwo value) {
mView.bannerDateTwo(value.getData());
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
});
}
/***
* 登录
*/
@Override
public void userLogin(String user, String pwd, String code) {
Map<String,String> map=new HashMap<>();
map.put("userName",user);
map.put("userPwd",pwd);
map.put("verifyCode",code);
RetrofitUtil.getInstance().initRetrofit().userLogin(map)
.subscribeOn(Schedulers.io())//执行在io线程
.observeOn(AndroidSchedulers.mainThread())//主线程
.subscribe(new Observer<BaseEntry<login>>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(BaseEntry<login> value) {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
});
}
}
public class MyApplication extends Application {
public static MyApplication myApplication;
public static final int TIMEOUT = 60;
private static OkHttpClient mOkHttpClient;
@Override
public void onCreate() {
super.onCreate();
myApplication = this;
}
/**
* 全局httpclient
*/
public static OkHttpClient initOKHttp() {
if (mOkHttpClient == null) {
mOkHttpClient = new OkHttpClient.Builder()
.connectTimeout(TIMEOUT, TimeUnit.SECONDS)//设置连接超时时间
.readTimeout(TIMEOUT, TimeUnit.SECONDS)//设置读取超时时间
.writeTimeout(TIMEOUT, TimeUnit.SECONDS)//设置写入超时时间
.addInterceptor(InterceptorUtil.LogInterceptor())//添加日志拦截器
.build();
}
return mOkHttpClient;
}
}
浙公网安备 33010602011771号