首先关于导入相关依赖
compile 'com.squareup.retrofit2:retrofit:2.1.0'
compile 'com.squareup.retrofit2:converter-gson:2.0.2'
compile 'io.reactivex.rxjava2:rxjava:2.1.1'
compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
compile 'com.squareup.retrofit2:adapter-rxjava2:2.3.0'
compile 'com.squareup.okhttp3:okhttp:3.9.0'
Retrofit部分
1.定义一个借口
public interface GitHubService {
/*"":/到?之间的内容*/
@GET("product/getCarts")
//bean:解析的bean类
//uid:拼接的参数
Observable<CartBean> getCall(@Query("uid") String uid);
}
2.RetrofitUtils
public class RetrofitUtils {
private static volatile RetrofitUtils instance;
private final Retrofit retrofit;
private static OkHttpClient getOkhttpClient() {
return new OkHttpClient.Builder()
.connectTimeout(5000, TimeUnit.MILLISECONDS)
.addInterceptor(new Logger())
.build();
}
private RetrofitUtils(String baseurl) {
retrofit = new Retrofit.Builder()
.baseUrl(baseurl)
.client(getOkhttpClient())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.build();
}
public static RetrofitUtils getInstance(String baseurl) {
if (instance == null) {
synchronized (RetrofitUtils.class) {
if (instance == null) {
instance = new RetrofitUtils(baseurl);
}
}
}
return instance;
}
public Retrofit getretrofit(){
return retrofit;
}
}
3.拦截器
public class Logger implements Interceptor{
@Override
public Response intercept(Chain chain) throws IOException {
Request original = chain.request();
HttpUrl url=original.url().newBuilder()
//需要添加的公共参数,以键值对形式添加
.addQueryParameter("source","android")
.build();
//添加请求头
Request request = original.newBuilder()
.url(url)
.build();
return chain.proceed(request);
}
}
接下来是MVP
1.首先创建moudel层的接口:MyModelPort
public interface MyModelPort {
void onSuccess(Object o);
void onFailed(Exception e);
}
2.创建Moudle层的实现类,用来请求数据(这里使用的Retrofit+RXjava)MyModel
public class MyModel {
public void requestDate(String url,String str,final MyModelPort myModelPort){
Observable<CartBean> call = RetrofitUtils.getInstance(url)
.getretrofit()
.create(GitHubService.class)
.getCall(str);
call.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<CartBean>() {
@Override
public void onSubscribe(@NonNull Disposable d) {
}
@Override
public void onNext(@NonNull CartBean cartBean) {
myModelPort.onSuccess(cartBean);
}
@Override
public void onError(@NonNull Throwable e) {
myModelPort.onFailed((Exception) e);
}
@Override
public void onComplete() {
}
});
}
}
3.创建vlid层接口 :ViewCallBack
public interface ViewCallBack {
void onSuccess(Object o);
void onFailed(Exception e);
}
4.创建presenter层接口:MyPresenter
public class MyPresenter {
private ViewCallBack callBack;
public MyPresenter(ViewCallBack callBack) {
this.callBack = callBack;
}
MyModel myModel=new MyModel();
public void getDate(String url,String str){
myModel.requestDate(url, str, new MyModelPort() {
@Override
public void onSuccess(Object o) {
callBack.onSuccess(o);
}
@Override
public void onFailed(Exception e) {
callBack.onFailed(e);
}
});
}
/**
* 防止内存泄露
* */
public void detach(){
callBack=null;
}
}
5.调用
myPresenter = new MyPresenter1(this);
myPresenter.getDate("http://120.27.23.105/","100");