依赖:

    //retrofit2implementation 'com.squareup.retrofit2:retrofit:2.4.0'implementation 'com.squareup.retrofit2:converter-gson:2.4.0'implementation 'com.squareup.retrofit2:adapter-rxjava2:2.4.0'//rxjava2implementation 'io.reactivex.rxjava2:rxjava:2.1.16'implementation 'io.reactivex.rxjava2:rxandroid:2.0.2'//okhttp3implementation 'com.squareup.okhttp3:okhttp:3.10.0'implementation 'com.squareup.okhttp3:logging-interceptor:3.10.0'

权限:

    <uses-permission android:name="android.permission.INTERNET"/><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

RetrofitInterface:

import com.example.rk7.model.bean.JavaBean;import io.reactivex.Observable;
import retrofit2.http.GET;
import retrofit2.http.Query;/*** author:Created by WangZhiQiang on 2018/5/16.*/
public interface RetrofitInterface {@GET("nba/?key=71e58b5b2f930eaf1f937407acde08fe&")Observable<JavaBean> getCall(@Query("num") int num);@POST("product/getCarts")@FormUrlEncodedObservable<CartBean> getCartBean(@FieldMap HashMap<String, String> map);
}

RetrofitUtil:(Retrofit的简单封装类)

import android.util.Log;import com.example.rk7.model.callback.RetrofitInterface;import java.io.IOException;
import okhttp3.Interceptor;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.logging.HttpLoggingInterceptor;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;/*** author:Created by WangZhiQiang on 2018/5/16.*/
public class RetrofitUtil{private Retrofit retrofit;private static RetrofitUtil retrofitUtil;private RetrofitUtil() { }private RetrofitUtil(String baseUrl) {//第三方的日志拦截器HttpLoggingInterceptor logInterceptor = new HttpLoggingInterceptor(new HttpLogger());logInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);//OKhttp3  设置拦截器打印日志OkHttpClient okHttpClient = new OkHttpClient().newBuilder()
//                .addNetworkInterceptor(logInterceptor)
//                .addInterceptor(new LoggingInterceptor())//自定义拦截器.readTimeout(50, TimeUnit.SECONDS).writeTimeout(50, TimeUnit.SECONDS).build();retrofit = new Retrofit.Builder().baseUrl(baseUrl) //设置网络请求的Url地址.addConverterFactory(GsonConverterFactory.create()) //设置数据解析器.addCallAdapterFactory(RxJava2CallAdapterFactory.create())//支持RxJava2平台.client(okHttpClient)//OKhttp3添加到Retrofit.build();}//指定baseUrlpublic static RetrofitUtil getInstance(String baseUrl){if (retrofitUtil==null){synchronized (RetrofitUtil.class){if (null==retrofitUtil){retrofitUtil = new RetrofitUtil(baseUrl);}}}return retrofitUtil;}//默认的baseUrlpublic static RetrofitUtil getInstance(){if (null == retrofitUtil){return  getInstance("http://api.tianapi.com/");}return retrofitUtil;}//获得Retrofitpublic Retrofit getRetrofit(){return retrofit;}//直接获得RetrofitInterfacepublic RetrofitInterface getRetrofitInterface(){RetrofitInterface retrofitInterface = retrofit.create(RetrofitInterface.class);return retrofitInterface;}//自定义拦截器/上传公共参数public static class LoggingInterceptor implements Interceptor {@Override public okhttp3.Response intercept(Chain chain) throws IOException {Request request = chain.request();//请求前--打印请求信息long t1 = System.nanoTime();Log.e("myMessage",String.format("Sending url %s \n %s \n\n%s \n\n %s",request.url(), chain.connection(), request.headers(),request.body()));//网络请求okhttp3.Response response = chain.proceed(request);//网络响应后--打印响应信息long t2 = System.nanoTime();Log.e("myMessage",String.format("Received response for %s in %.1fms%n%s",response.request().url(), (t2 - t1) / 1e6d, response.headers()));return response;//            上传公共参数
//            Request request = chain.request();
//            Response response = null;
//            Request requestProcess = null ;
//            if("GET".equals(request.method())){
//                String url =  request.url().toString() + "&source=android";
//                Request.Builder builder =  request.newBuilder() ;
//                builder.get().url(url);
//                requestProcess =  builder.build();
//                response = chain.proceed(requestProcess);
//            } else {
//                FormBody.Builder builder = new FormBody.Builder() ;
//                RequestBody requestBody =  request.body() ;
//                if(requestBody instanceof FormBody){
//                    FormBody formBody = (FormBody)requestBody ;
//                    for (int i=0;i<formBody.size();i++){
//                        builder.add(formBody.encodedName(i),formBody.encodedValue(i));
//                    }
//                    builder.add("source","android");
//                }
//                requestProcess =  request.newBuilder().url(request.url().toString()).post(builder.build()).build() ;
//                response = chain.proceed(requestProcess);
//            }
//            return response;}}//日志信息public static class HttpLogger implements HttpLoggingInterceptor.Logger {@Overridepublic void log(String message) {Log.e("myMessage", message);}}
}

使用:

import android.util.Log;import com.example.rk7.model.bean.JavaBean;
import com.example.rk7.model.http.RetrofitUtil;
import com.example.rk7.view.interfaces.IMainView;import io.reactivex.Observable;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.functions.Consumer;
import io.reactivex.schedulers.Schedulers;/*** author:Created by WangZhiQiang on 2018/4/16.*/
public class MainPresenter extends BasePresenter<IMainView>{public void getDataFromServer(int num) {
//        Retrofit retrofit = RetrofitUtil.getInstance().getRetrofit();
//        RetrofitInterface retrofitInterface = retrofit.create(RetrofitInterface.class);Observable<JavaBean> observable = RetrofitUtil.getInstance().getRetrofitInterface().getCall(num);observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Consumer<JavaBean>() {@Overridepublic void accept(JavaBean javaBean) throws Exception {Log.e("getDataFromServer",javaBean.getNewslist().size()+"");}});//map操作符使用
//        Observable<JavaBean> observable = RetrofitUtil.getInstance().getRetrofitInterface().getCall(num);
//        observable.subscribeOn(Schedulers.io())
//                .observeOn(AndroidSchedulers.mainThread())
//                .map(new Function<JavaBean, JavaBean.NewslistBean>() {
//                    @Override
//                    public JavaBean.NewslistBean apply(JavaBean javaBean) throws Exception {
//                        return javaBean.getNewslist().get(0);
//                    }
//                }).subscribe(new Consumer<JavaBean.NewslistBean>() {
//            @Override
//            public void accept(JavaBean.NewslistBean newslistBean) throws Exception {
//                Log.e("getDataFromServer",newslistBean.getTitle()+"");
//            }
//        });}
}

JavaBean:

public class JavaBean {/*** code : 200* msg : success* newslist : [{"ctime":"2016-12-04 13:00","title":"格林:理解科尔吸食大麻 不过我从没吸过","description":"NBA新闻","picUrl":"http://www.51tyw.com/uploads/allimg/161204/1-161204120131.jpg","url":"http://www.51tyw.com/nba/2421.html"},{"ctime":"2016-12-04 00:00","title":"三分纪录延续!火箭队连续19场比赛命中10+三分球","description":"NBA新闻","picUrl":"http://www.51tyw.com/uploads/allimg/161203/1-161203233J3.jpg","url":"http://www.51tyw.com/nba/2417.html"},{"ctime":"2016-12-04 00:00","title":"詹姆斯谈三连败:是时候紧起来了 必须打得男人点","description":"NBA新闻","picUrl":"http://www.51tyw.com/uploads/allimg/161203/1-161203234010.jpg","url":"http://www.51tyw.com/nba/2418.html"},{"ctime":"2016-12-03 12:00","title":"骑士输赢都靠三分?那还要詹姆斯做什么?","description":"NBA新闻","picUrl":"http://www.51tyw.com/uploads/allimg/161203/1-161203104344.jpg","url":"http://www.51tyw.com/nba/2407.html"},{"ctime":"2016-12-03 00:00","title":"公牛vs骑士直播看点:詹伟兄弟对决","description":"NBA新闻","picUrl":"http://www.51tyw.com/uploads/allimg/161202/1-161202221205.jpg","url":"http://www.51tyw.com/nba/2395.html"},{"ctime":"2016-12-02 22:00","title":"火箭和勇士联手创NBA三分纪录","description":"NBA新闻","picUrl":"http://www.51tyw.com/uploads/allimg/161202/1-161202214212.jpg","url":"http://www.51tyw.com/nba/2392.html"},{"ctime":"2016-12-02 22:00","title":"巴克利:勇士打得像女式篮球,太软了!","description":"NBA新闻","picUrl":"http://www.51tyw.com/uploads/allimg/161202/1-161202215032.jpg","url":"http://www.51tyw.com/nba/2394.html"},{"ctime":"2016-12-02 20:00","title":"詹姆斯完成月最佳球员4连霸的壮举!","description":"NBA新闻","picUrl":"http://www.51tyw.com/uploads/allimg/161202/1-1612021PI0.jpg","url":"http://www.51tyw.com/nba/2388.html"},{"ctime":"2016-12-01 00:00","title":"威少再下三双战书!詹皇会不会先认怂?","description":"NBA新闻","picUrl":"http://www.51tyw.com/uploads/allimg/161128/1-16112Q13251.jpg","url":"http://www.51tyw.com/nba/2374.html"},{"ctime":"2016-12-01 00:00","title":"骑士这样的防守想夺冠?也许卫冕只是空谈!","description":"NBA新闻","picUrl":"http://www.51tyw.com/uploads/allimg/161130/1-161130222229.jpg","url":"http://www.51tyw.com/nba/2375.html"},{"ctime":"2016-12-01 00:00","title":"2016-2017赛季达拉斯小牛队球员名单","description":"NBA新闻","picUrl":"http://www.51tyw.com/uploads/allimg/161130/1-161130223630H8.gif","url":"http://www.51tyw.com/nba/2376.html"},{"ctime":"2016-11-28 12:00","title":"勇士队第一中锋竟是杜兰特","description":"NBA新闻","picUrl":"http://www.51tyw.com/uploads/allimg/161128/1-16112Q10H7.jpg","url":"http://www.51tyw.com/nba/2348.html"},{"ctime":"2016-11-28 12:00","title":"三双之战谁怕谁!詹皇三双数据超威少","description":"NBA新闻","picUrl":"http://www.51tyw.com/uploads/allimg/161128/1-16112Q12440.jpg","url":"http://www.51tyw.com/nba/2349.html"},{"ctime":"2016-11-28 12:00","title":"队史第一人!杜兰特成首位砍下25+10+5+5的球员","description":"NBA新闻","picUrl":"http://www.51tyw.com/uploads/allimg/161128/1-16112Q13251.jpg","url":"http://www.51tyw.com/nba/2350.html"},{"ctime":"2016-11-28 00:00","title":"湖人vs老鹰分析:缺兵少将的湖人恐不敌老鹰","description":"NBA新闻","picUrl":"http://www.51tyw.com/uploads/allimg/161127/1-16112H24117.jpg","url":"http://www.51tyw.com/nba/2346.html"},{"ctime":"2016-11-27 22:00","title":"2016-2017赛季亚特兰大老鹰队球员名单","description":"NBA新闻","picUrl":"http://www.51tyw.com/uploads/allimg/161125/1-1611251R231A1.gif","url":"http://www.51tyw.com/nba/2344.html"},{"ctime":"2016-11-25 22:00","title":"科比退役赛视频:黑曼巴最后一役砍60分","description":"NBA新闻","picUrl":"http://www.51tyw.com/uploads/allimg/161125/1-1611251R231A1.gif","url":"http://www.51tyw.com/nba/2307.html"},{"ctime":"2016-11-25 20:00","title":"NBA官方承认尼克杨绝杀走步","description":"NBA新闻","picUrl":"http://www.51tyw.com/uploads/allimg/161125/1-1611251R231A1.gif","url":"http://www.51tyw.com/nba/2304.html"},{"ctime":"2016-11-25 18:00","title":"骑士若无詹皇只能垫底 去76人都能进总决赛","description":"NBA新闻","picUrl":"http://www.51tyw.com/uploads/allimg/161125/1-1611251J401.jpg","url":"http://www.51tyw.com/nba/2303.html"},{"ctime":"2016-11-25 02:00","title":"湖人队赛程:2016-2017洛杉矶湖人队赛程表","description":"NBA新闻","picUrl":"http://www.51tyw.com/uploads/allimg/161122/1-161122205542.jpg","url":"http://www.51tyw.com/nba/2299.html"}]*/private int code;private String msg;private List<NewslistBean> newslist;public int getCode() {return code;}public void setCode(int code) {this.code = code;}public String getMsg() {return msg;}public void setMsg(String msg) {this.msg = msg;}public List<NewslistBean> getNewslist() {return newslist;}public void setNewslist(List<NewslistBean> newslist) {this.newslist = newslist;}public static class NewslistBean {/*** ctime : 2016-12-04 13:00* title : 格林:理解科尔吸食大麻 不过我从没吸过* description : NBA新闻* picUrl : http://www.51tyw.com/uploads/allimg/161204/1-161204120131.jpg* url : http://www.51tyw.com/nba/2421.html*/private String ctime;private String title;private String description;private String picUrl;private String url;public String getCtime() {return ctime;}public void setCtime(String ctime) {this.ctime = ctime;}public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}public String getDescription() {return description;}public void setDescription(String description) {this.description = description;}public String getPicUrl() {return picUrl;}public void setPicUrl(String picUrl) {this.picUrl = picUrl;}public String getUrl() {return url;}public void setUrl(String url) {this.url = url;}}
}

okhttp3+retrofit2+rxjava2使用相关推荐

  1. JAVA调用接口简单封装,Mvp+Retrofit2+RxJava2 项目中使用的简洁封装

    Retrofit2 + RxJava2 是一个强大的组合,完成一系列网络请求 MVP当前用的很多的一种框架,Model+View+Presenter 本文记录了作者在项目中对 Retrofit2 + ...

  2. Rxjava Disposable解除订阅(Retrofit2+Rxjava2主动取消网络请求)

    Disposable类 dispose():主动解除订阅(如果使用Retrofit2+Rxjava2,调用dispose会主动取消网络请求,在本文的后半部分) isDisposed():查询是否解除订 ...

  3. java retrofit_Android开发Retrofit2+Rxjava2+okHttp 网络框架封装

    释放双眼,带上耳机,听听看~! 说明 RxJava的概念其实很模糊,我对它的理解就是一个给你方便处理异步问题的框架,到底有多方便,体会过才知道... Retrofit就是对okhttp做了一层封装.把 ...

  4. Retrofit2+Rxjava2+okHttp 网络框架封装

    说明 RxJava的概念其实很模糊,我对它的理解就是一个给你方便处理异步问题的框架,到底有多方便,体会过才知道... Retrofit就是对okhttp做了一层封装.把网络请求都交给给了Okhttp, ...

  5. Android网络请求归纳 HttpUrlConnection| Vollety|OKHttp3|Retrofit2

    1.网络基础知识: Android网络API库有哪些?      HttpUrlConnection: jdk内置      HttpClient:android提供,6.0被删除      Voll ...

  6. OkHttp3 + retrofit2 封装

    0.下载文件 1.gradle 添加 compile 'com.squareup.retrofit2:retrofit:2.1.0'compile 'com.squareup.retrofit2:co ...

  7. RXJava3+OKHTTP3+Retrofit2(观察者设计模式)讲解+实战

    废话不多说,全部代码请拉到最后!!!! retrofit是载体(基于okhttp),rxjava 就是一个实现异步操作的库. 它的简洁的与众不同之处在于,随着程序逻辑变得越来越复杂,它依然能够保持简洁 ...

  8. Android中的设计模式之观察者模式

    参考 <设计模式:可复用面向对象软件的基础 >5.7 Observer 观察者 对象行为型模式 <设计模式解析> 18.4 Observer模式 <Android源码设计 ...

  9. 自学Android开发 关于OkHttp3的request和respond拦截打印Log

    一.需求和问题 在开发Android项目时,一定需要和后端对接网络请求,但在因为现在都JSON格式的数据结构,在数据字段前后不一致是Android端是无法判断是是字段错误还是数据本身没有值.所有在数据 ...

  10. Github优秀Android开源项目,值得引用与学习(注意!里面有巨图! )

    内容添加(--根据trending(today)/java从上往下添加的,根据时间查看,都是github的项目,以及大佬们的点赞的GitHub项目 ) 刚进来的时候需要加载很多图片和gif图片, 所以 ...

最新文章

  1. mxnet报错解决:AttributeError: module 'mxnet.context' has no attribute 'num_gpus'
  2. javascript中构造函数的返回值问题和new对象的过程
  3. 统计分组的原则是要体现什么_什么样的卖场原则更能体现商业设计的价值!
  4. 怎么钢枪_和平精英有战术钢枪和无脑冲有何区别?你们怎么看待这个问题
  5. cad官方卸载工具_【软件安装管家】Autodesk卸载官方工具安装教程
  6. cocos2d-X   CCSprite设置贴图(图片)大小
  7. 【PM2.5预测】基于matlab灰色模型PM2.5预测【含Matlab源码 499期】
  8. dom4j 解析xml Error on line 9717 of document 不允许有匹配 [xX][mM][lL] 的处理指令目标
  9. wps页眉怎么设置不同页码_WPS论文排版教程二:如何设置不同页码
  10. python无限循环一段句子,python无限循环语句如何实现
  11. 重启linux没有网络配置文件,Linux 网络配置 修改DNS配置文件/etc/resolv.conf后,重启网络,DNS配置丢失...
  12. CSDN问答——精选问答Vol.7
  13. 微信小程序如何修改单页面背景色
  14. bada-开发入门之HelloWorld(上)
  15. SQL LIKE操作符、通配符以及通配符的使用
  16. QT入门看这一篇就够了——超详细讲解(40000多字详细讲解,涵盖qt大量知识)
  17. 毕业设计 matlab led,基于Matlab的单相半波可控整流电路的设计与仿真论文和Matlab源码...
  18. findBugs学习小结
  19. 自考计算机app软件排行,自考软件哪个好 免费的自考软件推荐
  20. 2022年熔化焊接与热切割题库及模拟考试

热门文章

  1. Qt QImage实现频谱图绘制
  2. IP地址的分类及范围详解:A、B、C、D、E五类是如何划分的
  3. 全国计算机等级考试三级网络技术知识点考点
  4. Unity 大面积花草风吹动效果以及编辑
  5. 行为画像分析 行业客户画像 行业用户画像
  6. BAPI_FIXEDASSET_OVRTAKE_CREATE 创建资产并折旧
  7. Word快捷键列表之Ctrl+
  8. CS231n 课程(笔记内容 by Aries.Y)
  9. Adobe Premiere Pro (PR) 视频剪辑相关应用
  10. 还在为表情包而发愁吗?今天教你用 Python 画一个奸笑(滑稽)表情(内附源码)