MVP+Retrofit(拦截器)+RXjava,自适用

首先关于导入相关依赖

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");
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值