Retrofit+Okhttp+RxJava
来源:互联网 发布:linux进图形化命令 编辑:程序博客网 时间:2024/05/18 12:30
很多朋友接手项目都开始带有Retrofit +Okhttp+RxJava搭建的网络请求框架,甚至有的还在尝试准备使用这个,接下来就来介绍一下这个网络请求框架的大致使用方法,和具体搭建方法。
直接上代码,首先是BaseView
public interface BaseView1 { /** * 显示操作进度 */ public void showProgress(); /** * 关闭进度 */ public void closeProgress(); /** * 成功回调 */ public void excuteErrSuccessCallBack(String s); /** * 失败回调 */ public void excuteErrFailedCallBack(String s);}
然后就是写实现BaseView的Api了,一般是将自己网络请求原地址写上去
import android.os.Build;import com.google.gson.Gson;import com.google.gson.GsonBuilder;import com.lvgou.distribution.bean.CallBackVo;import com.lvgou.distribution.presenter.ErrorLogPresenter;import com.lvgou.distribution.view.BaseView1;import com.squareup.okhttp.OkHttpClient;import java.util.concurrent.TimeUnit;import retrofit.GsonConverterFactory;import retrofit.Retrofit;import retrofit.RxJavaCallAdapterFactory;import rx.Subscriber;/** * Created by Administrator on 2016/9/9. */public class Api implements BaseView1 { private static Api ourInstance; private IServiceAPI gankService; private ErrorLogPresenter errorLogPresenter; public static Api getInstance() { if (ourInstance == null) ourInstance = new Api(); return ourInstance; } public boolean isOne = true; private Api() { OkHttpClient okHttpClient = new OkHttpClient(); okHttpClient.setReadTimeout(7676, TimeUnit.MILLISECONDS); errorLogPresenter = new ErrorLogPresenter(this); isOne = true; /* * 查看网络请求发送状况 */// if (EasyApplication.getInstance().log) {// okHttpClient.interceptors().add(chain -> {// Response response = chain.proceed(chain.request());// com.orhanobut.logger.Logger.d(chain.request().urlString());// return response;// });// } Gson mGson = new GsonBuilder() .registerTypeAdapter(String.class, new DeserializerData()) .create(); Retrofit retrofit = new Retrofit.Builder().baseUrl("原网络请求地址") .addCallAdapterFactory( RxJavaCallAdapterFactory.create()) .addConverterFactory(GsonConverterFactory.create(mGson)) .client(okHttpClient) .build(); this.gankService = retrofit.create(IServiceAPI.class); } public IServiceAPI getGankService() { return gankService; } /** * 创建 Subscriber * * @param mICallBackListener * @return Subscriber */ public Subscriber createSubscriber(final ICallBackListener mICallBackListener) { Subscriber mSubscriber = new Subscriber<String>() { @Override public void onCompleted() {// Log.i(TAG, "[onCompleted]"); } @Override public void onError(Throwable e) {// Log.e(TAG, "[onError]" + e.getMessage()); CallBackVo mCallBackVo = new CallBackVo();// mCallBackVo.setResCode("400");// mCallBackVo.setResMsg("请求失败");// mCallBackVo.setResObj(null); return; } @Override public void onNext(String s) { Gson gosn = new Gson(); CallBackVo mCallBackVo = gosn.fromJson(s, CallBackVo.class); if (mCallBackVo.getStatus().equals("1")) { mICallBackListener.onSuccess(s); } else { mICallBackListener.onFaild(mCallBackVo.getMessage()); } } }; return mSubscriber; } @SuppressWarnings("static-access") public static String GetDeviceName() { return new Build().MODEL; } @Override public void showProgress() { } @Override public void closeProgress() { } @Override public void excuteErrSuccessCallBack(String s) { } @Override public void excuteErrFailedCallBack(String s) { }}这样就完成了第一步,接下来就是网上很多的retrofit的运用,怎么去传递参数问题,对于这个我只是举例我post上传的方式,其它的去网上其它位子copy一下就行了
public interface IServiceAPI {@FormUrlEncoded @POST("网络请求链接尾") Observable<String> shareMedal(@Field("参数名字") String 参数值, @Field("参数名字") String 参数值);}剩下就来看怎么去调用这个网络请求了
public class ShareMedalImpl implements ShareMedalModel { @Override public void shareMedal(String 参数值,String 参数值, ICallBackListener callBackListener) { IServiceAPI mIServiceAPI = Api.getInstance().getGankService(); mIServiceAPI.shareMedal(参数值, 参数值) // Subscriber前面执行的代码都是在I/O线程中运行 .subscribeOn(Schedulers.io()) // 操作observeOn之后操作主线程中运行. .observeOn(AndroidSchedulers.mainThread()) .subscribe(Api.getInstance().createSubscriber(callBackListener)); }}这个就是调用第一步,获取到callback,然后进行post那边的调用
后面那个Model实际就是一个interface,就写上
void shareMedal(String 参数值,String 参数值, ICallBackListener callBackListener);这个方法而已
接下来就是presenter层了,也就是最后层,就是对上面的这些的调用,然后想办法返回出去自己请求网络的结果,是失败还是成功什么的。
public class ShareMedalPresenter extends BasePresenter<ShareMedalView> { private ShareMedalImpl shareMedalImpl; private ShareMedalView shareMedalView; private Handler mHandler; public ShareMedalPresenter(ShareMedalView shareMedalView) { this.shareMedalView = shareMedalView; shareMedalImpl = new ShareMedalImpl(); mHandler = new Handler(Looper.getMainLooper()); } public void shareMedal(String 参数, String 参数) { shareMedalImpl.shareMedal(参数,参数, new ICallBackListener() { @Override public void onSuccess(final String s) { mHandler.post(new Runnable() { @Override public void run() { shareMedalView.closeShareMedalProgress(); shareMedalView.OnShareMedalSuccCallBack("1", s); } }); } @Override public void onFaild(final String s) { mHandler.post(new Runnable() { @Override public void run() { shareMedalView.closeShareMedalProgress(); shareMedalView.OnShareMedalFialCallBack("1", s); } }); } }); }}
接下来要写的ShareMedalView这个也就是你调用实例化presenter位子要实现这个接口,然后实现方法的位子,就是new Presenter(this),这里this是让当前类实现方法,会实现三个方法,也就是下面view要写出来的抽象方法:
public interface ShareMedalView { /** * 成功回调 * * @param state * @param respanse */ void OnShareMedalSuccCallBack(String state, String respanse); /** * 失败回调 * * @param state * @param respanse */ void OnShareMedalFialCallBack(String state, String respanse); /** * 关闭弹窗 */ void closeShareMedalProgress();}
对了,钓了一个basepresenter,这个也就是一个基类,写上也无妨
public abstract class BasePresenter<T> { public T mView; public CompositeSubscription mCompositeSubscription; public DataManager mDataManager; public void attach(T mView){ this.mView=mView; this.mCompositeSubscription = new CompositeSubscription();// this.mDataManager = DataManager.getInstance(); } public void dettach(){ mView=null; this.mCompositeSubscription.unsubscribe(); this.mCompositeSubscription = null;// this.mDataManager = null; } public boolean isViewAttached() { return mView != null; } public T getMvpView() { return mView; }}调用的时候实例化
shareMedalPresenter = new ShareMedalPresenter(this);
shareMedalPresenter .sharemedal()方法就行了
哈哈,就这么简单,再也不要为Retrofit+Okhttp+RxJava这个框架烦恼了,其实也没什么高端的,不会用的时候永远觉得遥不可及,当切身使用就觉得没什么难的了。
阅读全文
0 0
- Retrofit+RxJava+OKhttp+RxBus
- retrofit+okhttp+rxjava
- Rxjava 、Retrofit、Okhttp整合
- Rxjava+ReTrofit+okHttp深入浅出
- RxJava+Retrofit+OkHttp实战
- Retrofit+Okhttp+RxJava
- retrofit+okhttp+rxjava
- Android OkHttp Retrofit RxJava
- RxJava+Retrofit+OkHttp+mvp
- 封装RxJava+Retrofit+OkHttp
- mvp+rxjava+retrofit+okhttp
- Retrofit + Rxjava + Okhttp
- MVP+Retrofit+Okhttp+RxJava
- Retrofit+Rxjava+Okhttp+MVP
- RxJava+Retrofit+okhttp实践结合
- Rxjava+Retrofit+okhttp+mvp实现
- Retrofit+Rxjava+okhttp基本使用
- Rxjava+retrofit+okhttp源码分析
- Linux---守护进程
- sql去掉前后空格
- php cli传递参数的方法
- Tomcat中Context是什么用的
- MySQL索引
- Retrofit+Okhttp+RxJava
- 不可多得的Javascript(AJAX)开发工具 - Aptana
- MySql Workbench 快捷键配置示例(F5执行)
- Oracle 数据库学习笔记02
- mySQL中删除unique key的语法
- 微信小程序(4)--实用控件集
- Aptana使用入门一:Code Assist
- Android从底部弹出的多选弹窗
- JSP 防止重复提交 防止重复刷新 防止后退问题以及处理方式