依赖:
权限:
使用:
JavaBean:
- //retrofit2
- implementation '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'
- //rxjava2
- implementation 'io.reactivex.rxjava2:rxjava:2.1.14-RC1'
- implementation 'io.reactivex.rxjava2:rxandroid:2.0.2'
- //okhttp3
- implementation '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);
- }
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())//自定义拦截器
- .build();
- retrofit = new Retrofit.Builder()
- .baseUrl(baseUrl) //设置网络请求的Url地址
- .addConverterFactory(GsonConverterFactory.create()) //设置数据解析器
- .addCallAdapterFactory(RxJava2CallAdapterFactory.create())//支持RxJava2平台
- .client(okHttpClient)//OKhttp3添加到Retrofit
- .build();
- }
- //可指定baseUrl
- public static RetrofitUtil getInstance(String baseUrl){
- if (retrofitUtil==null){
- synchronized (RetrofitUtil.class){
- if (null==retrofitUtil){
- retrofitUtil = new RetrofitUtil(baseUrl);
- }
- }
- }
- return retrofitUtil;
- }
- //默认的baseUrl
- public static RetrofitUtil getInstance(){
- if (null == retrofitUtil){
- return getInstance("http://api.tianapi.com/");
- }
- return retrofitUtil;
- }
- //获得Retrofit
- public Retrofit getRetrofit(){
- return retrofit;
- }
- //直接获得RetrofitInterface
- public 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;
- }
- }
- //日志信息
- public static class HttpLogger implements HttpLoggingInterceptor.Logger {
- @Override
- public 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>() {
- @Override
- public 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()+"");
- // }
- // });
- }
- }
- 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;
- }
- }
- }