Retrofit2 初印象

鄙人由于工作繁忙很久没写博客了还望大家谅解!之前csdn登不上,算了不说借口了,retrofit2相信已经很火了吧,而且上手也比较容易,之前可能大家都是用Volley,Okhttp、Okhttp3其实大同小异,最近由于项目需要,之前大家相信很多人在用鸿神的okhttpUitl工具类,其实鸿神也写过一篇关于Retrofit2的文章感兴趣的童鞋异移步到这里这么晚还开车真是不容易啊!没办法自己太菜了!我去!

注解

retrofit通过使用注解来简化请求,大体分为以下几类:

1.用于标注请求方式的注解

2.用于标记请求头的注解

3.用于标记请求参数的注解

4.用于标记请求和响应格式的注解

请求方法注解

@GET get请求
@PUT put请求
@POST post请求
@PATCH patch请求,该请求是对put请求的补充,用于更新局部资源
@delete delete请求
@HEAD head请求
@OPTIONS option请求
@HTTP 通用注解,可以替换以上所有的注解,其拥有三个属性:method,path,hasBody

请求头注解

注解 说明
@Headers 用于添加固定请求头,可以同时添加多个。通过该注解添加的请求头不会相互覆盖,而是共同存在
@Header 作为方法的参数传入,用于添加不固定值的Header,该注解会更新已有的请求头

请求参数头注解

请求和响应格式注解

简单使用

首先介绍的是get请求方式
 public interface AppInfoStore{
        @GET("index.php?route=app/index/init")
        Call<AppInfo> init(@Query("version_code")String version_code);
        @GET("index.php?route=app/index/init")
        Observable<AppInfo> initRx(@Query("version_code")String version_code);
    }
  1. 第一步创建ApiClient
  2. 利用GsonFormat生成对应的Bean
  3. 然后在主Activity中进行接口联调
package zm.visoport.com.retrofitproject.weather;

import retrofit2.Retrofit;
import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;
import retrofit2.http.GET;
import retrofit2.http.Query;
import rx.Observable;
import zm.visoport.com.retrofitproject.register.AppInfo;

/**
 * @author zm
 */

public class AppInfoClient {

    static Retrofit mRetrofit = null;
    /**
    *
    **/
    public static Retrofit getAppInfo() {
        if (mRetrofit == null) {
            mRetrofit = new Retrofit.Builder()
           //添加rxjava的支持       .baseUrl("http://www.cnyouyao.com/").addCallAdapterFactory(RxJavaCallAdapterFactory.create()).addConverterFactory(GsonConverterFactory.create())
                    .build();
        }
        return mRetrofit;
    }
    public interface AppInfoStore{
//        @GET("index.php?route=app/index/init")
//        Call<AppInfo> init(@Query("version_code")String version_code);
        @GET("index.php?route=app/index/init")
        Observable<AppInfo> initRx(@Query("version_code")String version_code);
    }
}

第二步进行bean的创建这里用的是hijson格式化json数据

GsonFormat生成对应Bean实体

package zm.visoport.com.retrofitproject.register;

/**
 * @author zm
 */

public class AppInfo {
    private AppInfo appInfo;

    public AppInfo getAppInfo() {
        return appInfo;
    }

    public void setAppInfo(AppInfo appInfo) {
        this.appInfo = appInfo;
    }
    /**
     * code : 200
     * data : {"apk_url":"http://www.baidu.com","app_id":"1","date_added":"2017-03-17 23:02:00","date_update":"2017-03-17 23:02:07","is_upload":"1","status":"1","type":"1","upgrade_id":"1","upgrade_point":"有新功能了,快来体验吧!","version_code":"2.1","version_id":"2","version_mini":"1"}
     * message : 版本升级信息获取成功
     * pager : 1
     */

    private int code;
    private DataBean data;
    private String message;
    private int pager;

    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public DataBean getData() {
        return data;
    }

    public void setData(DataBean data) {
        this.data = data;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public int getPager() {
        return pager;
    }

    public void setPager(int pager) {
        this.pager = pager;
    }

    public static class DataBean {
        /**
         * apk_url : http://www.baidu.com
         * app_id : 1
         * date_added : 2017-03-17 23:02:00
         * date_update : 2017-03-17 23:02:07
         * is_upload : 1
         * status : 1
         * type : 1
         * upgrade_id : 1
         * upgrade_point : 有新功能了,快来体验吧!
         * version_code : 2.1
         * version_id : 2
         * version_mini : 1
         */

        private String apk_url;
        private String app_id;
        private String date_added;
        private String date_update;
        private String is_upload;
        private String status;
        private String type;
        private String upgrade_id;
        private String upgrade_point;
        private String version_code;
        private String version_id;
        private String version_mini;

        public String getApk_url() {
            return apk_url;
        }

        public void setApk_url(String apk_url) {
            this.apk_url = apk_url;
        }

        public String getApp_id() {
            return app_id;
        }

        public void setApp_id(String app_id) {
            this.app_id = app_id;
        }

        public String getDate_added() {
            return date_added;
        }

        public void setDate_added(String date_added) {
            this.date_added = date_added;
        }

        public String getDate_update() {
            return date_update;
        }

        public void setDate_update(String date_update) {
            this.date_update = date_update;
        }

        public String getIs_upload() {
            return is_upload;
        }

        public void setIs_upload(String is_upload) {
            this.is_upload = is_upload;
        }

        public String getStatus() {
            return status;
        }

        public void setStatus(String status) {
            this.status = status;
        }

        public String getType() {
            return type;
        }

        public void setType(String type) {
            this.type = type;
        }

        public String getUpgrade_id() {
            return upgrade_id;
        }

        public void setUpgrade_id(String upgrade_id) {
            this.upgrade_id = upgrade_id;
        }

        public String getUpgrade_point() {
            return upgrade_point;
        }

        public void setUpgrade_point(String upgrade_point) {
            this.upgrade_point = upgrade_point;
        }

        public String getVersion_code() {
            return version_code;
        }

        public void setVersion_code(String version_code) {
            this.version_code = version_code;
        }

        public String getVersion_id() {
            return version_id;
        }

        public void setVersion_id(String version_id) {
            this.version_id = version_id;
        }

        public String getVersion_mini() {
            return version_mini;
        }

        public void setVersion_mini(String version_mini) {
            this.version_mini = version_mini;
        }
    }
}

第三步接口调用

根据一般请求跟rx请求方式

 @OnClick({R.id.btn_retrofit2,R.id.btn_retrofitrx})
    public void onViewClicked(View view) {
        switch (view.getId()) {
            case R.id.btn_retrofit2:
                getAppInfo();
//                getWeather();
                break;
            case R.id.btn_retrofitrx:
                getRXAppInfo();
                break;
        }
    }
 private void getAppInfo() {
        AppInfoClient.AppInfoStore app = AppInfoClient.getAppInfo().create(AppInfoClient.AppInfoStore.class);
        Call<AppInfo> call = app.init("2.1");
        call.enqueue(new Callback<AppInfo>() {
            @Override
            public void onResponse(Call<AppInfo> call, Response<AppInfo> response) {
                if (response.isSuccessful()) {

                    String appInfo = response.body().getData().getVersion_code() + "\n" +
                            response.body().getData().getApk_url() + "\n" +
                            response.body().getData().getVersion_id() + "\n" +
                            response.body().getData().getDate_update() + "\n";
                    tvResult.setText("版本信息如下:"+appInfo);
//                    tvRetrofit.setText(response.body().getAppInfo().getCode()+"\n"
//                    +response.body().getMessage()+"\n"+
//                    response.body().getAppInfo().getPager());
                }
            }

            @Override
            public void onFailure(Call<AppInfo> call, Throwable t) {
                Log.i(TAG, "onFailure: " + call.request());

            }
        });
    }

    private void getRXAppInfo() {
        AppInfoClient.AppInfoStore app = AppInfoClient.getAppInfo().create(AppInfoClient.AppInfoStore.class);
//        Call<AppInfo> call=app.init("2.1");
        final Observable<AppInfo> ob = app.initRx("2.1");
        ob.subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Subscriber<AppInfo>() {
                    //请求完成
                    @Override
                    public void onCompleted() {
                        Log.i(TAG, "onCompleted: ");
                    }
                   //请求失败
                    @Override
                    public void onError(Throwable e) {
                        Log.i(TAG, "onError: " + e.getMessage());

                    }
                     //获取网络数据并成功返回
                    @Override
                    public void onNext(AppInfo appInfo) {
                        tvRetrofit.setText("版本号:"+appInfo.getData().getVersion_code());

                    }
                });
    }

成功返回数据如图所示

经典文章推荐

《入门篇》

Retrofit2 入门

Retrofit2.0起步篇

Android Retrofit 2.0使用

《进阶篇》

Retrofit2 源码解析

Retrofit2 完全解析 探索与okhttp之间的关系

写到最后:

到这里基本的印象已经完成,具体项目还是您自己根据自己的魔板进行分析,很久没写博客了这个点大家应该都睡了!我赶快睡!一直听着外面的雨声滴答滴答跟钟一样,声声入耳!睡觉去了!转载请注明出处http://blog.csdn.net/qq_15950325/article/details/72235028

时间: 2024-08-01 12:54:29

Retrofit2 初印象的相关文章

OpenCL学习笔记(一):摩尔定律、异构计算与OpenCL初印象

关于摩尔定律: 摩尔定律1965年提出,晶体管密度是按照每年翻倍发展的,之后的趋势也是这样--每一代芯片的的时钟频率提高50%,而同时工艺节点减小了0.3,功耗密度翻倍(保持功耗相同的情况下,面积0.7*0.7=0.49,因此提高频率使得性能提升了):而在2000年中期之后,出现了物理尺寸更小的器件,意味着,我们没有办法保持功耗密度不变,而同时提高频率,结果我们看到自此之后,时钟频率并没有显著提高,需要通过并行来提高性能,所以多核CPU流行起来.即使是最基本的处理器,超标量和无序指令执行等高级体

初印象至Vue路由

初印象系列为快速了解一门技术的内容,后续会推出本人应用这门技术时发现的一些认识. Vue路由和传统路由的区别: Vue路由主要是用来实现单页面应用内各个组件之间的切换,同样支持传递参数等功能.而传统路由使用超链接 以下内容来自官网,js使用ES6 如何在vue项目中使用vue-router HTML <script src="https://unpkg.com/vue/dist/vue.js"></script> <script src="htt

Vue.js之初印象

一.背景 MVVM模式,很多人在说在用,好吧,我落后了,我目前的项目木有用到MVVM模式的框架,vuejs,reactjs,angularjs,nonono,自己去捣鼓过ng,项目木有用到.实在不敢称自己是front-end developer.趁这个失业期,vuejs的学习起哟. 二.简介 1.vue.js是什么 Vue.js是当下很火的一个JavaScript MVVM库,它是以数据驱动和组件化的思想构建的.相比于Angular.js,Vue.js提供了更加简洁.更易于理解的API,使得我们

uml时序图的初印象-------Day64

最近有好多想法迫不及待的想去实现,可是事实上是在那些最开始想的非常明白,感觉会没问题的地方也总是会出现问题,导致略微有些急躁,还是要淡定啊,又到了周末,明后天要收拾东西搬家,不知道宽带能不能顺利的给挪过去,想提前来记录下这周的工作吧. 总的来说,这周完成了界面的初始设计,然后就是这概要设计了,结果整合下来,word文档都有近百页了,太多时序图了,画的我都有些头昏脑涨.其实,在很久之前的某公司,我面试的第一道问题就是时序图,结果当时的我是可怜的一片茫然,结果也就自然而然了.这次再看时序图,又理解了

gulp初印象

几个月前三木君向我推荐过gulp,到现在因为工作需要才接触到它,真的很惭愧,在此记录下对gulp的初印象. 全局安装: $ npm install –global gulp 一个gulpfile.js文件: 这个文件需要在项目的根目录下创建.默认任务(什么也不做): var gulp = require('gulp'); gulp.task('default', function() { // place code for your default task here }); 下面的命令将执行这

Django初印象之视图(view)

一.view的初印象 一个视图函数(类),简称视图.我们发起web请求时,返回的web响应.[大家约定成俗将视图放置在项目(project)或应用程序(app)目录中的名为views.py的文件中.] 二.普通view的样子 下面是一个以HTML文档的形式返回当前日期和时间的视图: from django.http import HttpResponse import datetime def current_datetime(request): now = datetime.datetime.

Python初印象

Python第一次听到python,就有一种很难学的感觉,会不由自主的跟C语言联系起来,晦涩难懂,怕学不会,还怀疑自己会成为一个码农.第一次课上下来,感觉并不像想象中的困难,相对C语言来说,还是很容易理解的,没有那么多繁复的语法.理论课上老师讲的基本都能跟上都能够理解,但是一到自己动手写代码还是会没有什么头绪,思路可能是对的,但是反应到代码上还是有点困难.感觉如果实践课上老师先带我们一下可能会好一点.可能是因为它比C语言简单吧,对它的印象还是很好的,希望学完python以后,能自己编写一些简单的

Java之初印象

Java语言的跨平台性: Java语言的编程过程: 只要实现了特定平台下的解释器程序(JVM),Java字节码就能通过解释器程序在该平台下运行,这是java跨平台的根本,当前并不是在所有平台下都有相应的Java解释器程序,这也是Java并不是在所有平台下都能运行的原因,它只能在实现了Java解释器程序(JVM)的平台下运行 另: Java兼顾解释性与编译性语言的特点: JAVA源文件—>.class字节码文件 (编译型) .class文件在OS上运行的过程则是解释型的(JVM充当了解释器的作用)

一、java初印象

工作了些时候,用的java语言,看了下thinking in java ,特在此记录和分享些自己的理解. 一.关于程序设计,就是对于复杂性的管理 关于复杂性,可以认为有两个方面的考虑:待解决问题的复杂性, 解决该问题工具的复杂性.待解决的问题,程序员不好把控,而解决的工具,就是编程语言. 二.关于java是完全面向对象的语言 1.java完全面向对象,需要以“类”级别才能独立存在,比如方法,是不能独立存在的,一个方法总会要属于一个类. 这个“类”级别,并不完全是class, interface,