Android开发 retrofit入门讲解

前言

  retrofit基于okhttp封装的网络请求框架,网络请求的工作本质上是 OkHttp 完成,而 retrofit 仅负责网络请求接口的封装.如果你不了解OKhttp建议你还是先了解它在来学习使用retrofit,传送门:Android 开发 框架系列 OkHttp使用详解

  Retrofit优势,就是简洁易用,解耦,扩展性强,可搭配多种Json解析框架(例如Gson),另外还支持RxJava.但是,这篇博客不讲解RxJava配合使用的部分,与RxJava的配合使用将在另外一篇博客中讲解.

  另外retrofit已经是封装的非常好了,已经最大程度上的匹配各种使用情况,所以不建议多此一举的再次封装retrofit(最多封装retrofit的单例). 再次封装不会看起来很帅也不会让你很牛逼. 只会让你看起来更蠢.把已经很拓展很解耦的实现全部破坏.

Github地址

  https://github.com/square/retrofit

依赖

  如果你不需要使用RxJava模式,那么你只需要依赖下面2个:

    implementation ‘com.squareup.retrofit2:retrofit:2.6.2‘
    implementation ‘com.squareup.retrofit2:converter-gson:2.4.0‘

  gson是用来解析的Json数据使用的(个人偏爱Gson),retrofit也支持其他解析工具比如fastJson

简单的Demo(异步请求)

  老规矩按思维顺序讲解demo

1.创建Retrofit请求基础配置

  Retrofit配置好后,可以全局使用这一个Retrofit用来请求网络(所以你可以实现单例以全局使用),当然下面的代码只是demo:

  private Retrofit mRetrofit;
  private void initHttpBase(){
        mRetrofit = new Retrofit.Builder()
                .baseUrl("http://doclever.cn:8090/mock/5c3c6da33dce46264b24452b/")//base的网络地址
                .addConverterFactory(GsonConverterFactory.create())//使用Gson解析
                .build();
    }

2.创建数据返回后的Bean类

public class LoginBean {
    private int code;
    private String message;

    public int getCode() {
        return code;
    }

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

    public String getMessage() {
        return message;
    }

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

2.创建一个网络请求接口

public interface HttpList {

    @FormUrlEncoded //注解表示from表单  还有@Multipart 表单可供使用 当然你也可以不添加
    @POST("test/login_test") //网络请求路径
    Call<LoginBean> login(@Field("number") String number, @Field("password") String password);

}

注意,这是一个接口类. LoginBean则是数据返回后的Bean类(Retrofit会自动使用导入的Gson解析)

3.请求网络

private void postHttp(){
        HttpList httpList = mRetrofit.create(HttpList.class);
        Call<LoginBean> call = httpList.login("181234123", "123456");
        call.enqueue(new Callback<LoginBean>() {
            @Override
            public void onResponse(Call<LoginBean> call, Response<LoginBean> response) {
                LoginBean bean = response.body();
                Log.e(TAG, "onResponse: code="+bean.getCode());
                Log.e(TAG, "onResponse: message="+bean.getMessage());
            }

            @Override
            public void onFailure(Call<LoginBean> call, Throwable t) {
                Log.e(TAG, "onFailure: 网络请求失败="+t.getMessage());

            }
        });
    }

这样,我们就完成了一个网络请求.是不是特别简单

同步请求

private void postHttp2() {
        HttpList httpList = mRetrofit.create(HttpList.class);
        final Call<LoginBean> call = httpList.login("181234123", "123456");
        new Thread(new Runnable() { //Android主线程不能操作网络请求,所以new一个线程来操作
            @Override
            public void run() {
                try {
                    Response<LoginBean> response = call.execute();//同步请求网络
                    LoginBean bean = response.body();
                    Log.e(TAG, "onResponse: code=" + bean.getCode());
                    Log.e(TAG, "onResponse: message=" + bean.getMessage());
                } catch (IOException e) {
                    e.printStackTrace();
                }

            }
        }).start();

    }

如何停止网络请求

如何添加Header头

以固定数据的形式添加头信息

public interface HttpList {

    @Headers({"content1:one","content2:two"})
    @POST("test/logout_test")
    Call<LoginBean> logout1();

}

以非固定数据的形式添加头信息

public interface HttpList {

    @POST("test/logout_test")
    Call<LoginBean> logout2(@Header("content") String content);

}

原文地址:https://www.cnblogs.com/guanxinjing/p/11594249.html

时间: 2024-11-04 15:04:56

Android开发 retrofit入门讲解的相关文章

《Android开发从入门到精通》扶松柏.扫描版.pdf

下载地址:网盘下载 内容简介 编辑 <Android开发从入门到精通>系统讲解了Android软件开发的基础知识,图文并茂地帮助读者学习和掌握SDK.开发流程以及常用的API等.书中以讲述实战实例为导向,用一个个典型应用生动地引领读者进行项目开发实践.<Android开发从入门到精通>是一本内容翔实,理论实践紧密结合的教程. [1] 目录 编辑 第1章 走进Android世界 1.1 智能手机飞速发展 1.1.1 主流手机系统介绍 1.1.2 Android横空出世 1.2 And

[Android开发从入门到精通].扶松柏pdf高清版免费下载

下载地址:网盘下载 备用地址:网盘下载 内容简介编辑<Android开发从入门到精通>系统讲解了Android软件开发的基础知识,图文并茂地帮助读者学习和掌握SDK.开发流程以及常用的API等.书中以讲述实战实例为导向,用一个个典型应用生动地引领读者进行项目开发实践.<Android开发从入门到精通>是一本内容翔实,理论实践紧密结合的教程.[1] 目录编辑第1章 走进Android世界 1.1 智能手机飞速发展 1.1.1 主流手机系统介绍 1.1.2 Android横空出世 1.

[Android开发从入门到精通]扶松柏下载

下载地址: http://www.gqylpy.com/di/2 <Android开发从入门到精通>扶松柏PDF高清完整版-下载 内容简介编辑<Android开发从入门到精通>系统讲解了Android软件开发的基础知识,图文并茂地帮助读者学习和掌握SDK.开发流程以及常用的API等.书中以讲述实战实例为导向,用一个个典型应用生动地引领读者进行项目开发实践.<Android开发从入门到精通>是一本内容翔实,理论实践紧密结合的教程.目录编辑第1章 走进Android世界1.

Android 开发从入门到精通

如今的安卓开发越来越火,很多人投身到安卓的开发之中. 1. 疯狂Android讲义(第2版) 第一版荣获"电子工业出版社最畅销图书奖":累计印刷10次,销售码洋二百余万,是Android学习.开发人员必备之选. 本书深入阐述了Android应用开发的Activity.Service.BroadcastReceiver与ContentProvider四大组件,并详细介绍了Android全部图形界面组件的功能和用法,Android各种资源的管理与用法,Android图形.图像处理,事件处理

使用Ant搭建Android开发环境入门

使用Ant搭建Android开发环境入门 使用Ant搭建Android开发环境,建立android项目 配置Ant环境 下载Ant:http://ant.apache.org/bindownload.cgi 在windows上应该选择zip压缩包,将zip压缩包解压到一个目录. 打开系统环境变量,在系统变量栏点击新建,变量名输入“ANT_HOME”,变量值为Ant的根目录,如“D:\Android\apache-ant-1.9.0”,注意不要带双引号. 在系统变量中找到Path变量,点击编辑,在

Android开发快速入门(环境配置)

Android是一种激动人心的开源移动平台,它像手机一样无处不在,得到了Google以及其他一些开放手机联盟成员(如三星.HTC.中国移动.Verizon和AT&T等)的支持,因而不能不加以学习,否则你承担不起为此付出的代价. 好在Android开发入门很容易,即使没有Android手机都没关系,只需有一台可供安装Android SDK和设备模拟器的计算机即可. 本章首先介绍如何安装所有的开发工具,然后再创建一个可运行的应用——Android版“Hello, World”.如果你并非Androi

Android开发 retrofit下载与上传

前言 此博客只讲解retrofit下载与上传的使用,其实与其说是retrofit的下载与上传还不如说,依然是Okhttp的下载与上传.如果你需要了解retrofit入门请查看这篇博客(此博客不在详细讲解一些基础的东西):https://www.cnblogs.com/guanxinjing/p/11594249.html 下载 设置下载接口 public interface HttpList { @Streaming //注解这个请求将获取数据流,此后将不会这些获取的请求数据保存到内存中,将交与

【Android开发首选教程】Android开发从入门到精通精华教程列表

Android-Tips This is an awesome list of tips for android. If you are a beginner, this list will be the first choice for you when you have a difficult time. Welcome Star and Fork, your support is my greatest affirmation. 学习 Android 至今,大大小小的坑没少踩过,庆幸的是,

2017.12.18 Android开发之进程讲解

1.JAVA中线程的基本概念: 线程的两种实现方式: (1)继承Thread这个类(对象代表的是一个线程) (2)实现Runnable接口(对象代表的是一个线程体) 线程的生命周期: 创建: 生成线程对象: Start方法,就绪: 抢占CPU运行: 被其他线程抢占CPU或者阻塞,重新就绪: 执行完毕: 死亡状态,死亡后不可能复活: Android中:子线程原则上不允许修改UI组件,只有主线程可以修改UI组件 2.界面设定以及组件引入: private Button button; private