我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Android网络访问之Retrofit使用教程

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Android网络访问之Retrofit使用教程

一、概念

HttpClientAndroid 6中移除(API数量多扩展困难)。
HttpURLConnection目前官方集成的。
OKHttpSquare公司出品,底层通讯的实现。
RetrofitSquare公司出品,上层接口的封装,更方便使用面向对象思维进行网络操作。

二、使用

Android 9开始默认只允许使用 HTTPS 类型的网络请求,HTTP明文传输因为有安全隐患不再支持。坚持使用的话需要配置:右键res目录→New→Directory→创建一个xml目录,右键xml目录→New→File→创建一个network_config.xml文件,修改内容如下:

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <base-config cleartextTrafficPermitted="true">
        <trust-anchors>
            <certificates class="lazy" data-src="system" />
        </trust-anchors>
    </base-config>
</network-security-config>

Manifest {
    //添加网络访问权限
    <uses-permission android:name="android.permission.INTERNET" />
    //允许HTTP访问
    <application
        android:networkSecurityConfig="@xml/network_config"
    </application>
}

2.1HttpURLConnection

thread {
    var connection: HttpURLConnection? = null
    try {
        val response = StringBuilder()
        val url = URL("https://www.baidu.com")
        connection = url.openConnection() as HttpURLConnection
        connection.connectTimeout = 8000
        connection.readTimeout = 8000
        //GET请求
        val input = connection.inputStream
        val reader = BufferedReader(InputStreamReader(input))
        reader.useLines { response.append(it) }
        print(response.toString())
        //POST请求
        connection.requestMethod = "POST"
        val output = DataOutputStream(connection.outputStream)
        output.writeBytes("username=admin&password=123456")
    } catch (e: Exception) {
        e.printStackTrace()
    } finally {
        connection?.disconnect()
    }
}

2.2OKHttp

传送门

2.3Retrofit

查看最新版本

implementation 'com.squareup.retrofit2:retrofit:2.9.0'    //会连带下载 OkHttp和Okio
implementation 'com.squareup.retrofit2:converter-gson:2.k6.1'    //会连带下载 GSON

2.3.1 定义实体类

根据 JSON 内容,编写对应的实体类。

data class Person(var name: String, var age: Int)

2.3.2 定义API接口

根据 API 接口,编写对应的访问文件。命名通常以功能名称开头+Service结尾。

@GET从服务器获取数据
@POST向服务器提交数据
@PUT @PATCH修改服务器上的数据
@DELETE删除服务器上的数据
interface PersonService {
    //接口1:https://www.baidu.com/person.json
    @GET("person.json")    //表示发起的是GET请求,传入请求的地址(相对路径,重复根路径在后面配置)
    fun getPerson(): Call<list<Person>>    //返回值必须声明成Retrofit内置的Call类型,通过泛型指定服务器返回的具体数据类型
    //接口2:https://www.baidu.com/<page>/person.json
    @GET("{page}/get_data.json")    //使用 {page} 占位
    fun getData(@Path("page") page: Int): Call<Data>    //使用 @Path("page")注解来声明对应参数
    //接口3:https://www.baidu.com/person.json?u=<user>&t=<token>
    @GET("person.json")
    fun getData(@Query("u") user: String, @Query("t") token: String): Call<Data>
    //接口4:https://api.caiyunapp.com/v2/place?query=北京&token={token}&lang=zh_CN
    @GET("v2/place?token=${GlobalApplication.TOKEN}&lang=zh_CN")    //不变的参数固定写在GET里
    fun searchPlaces(@Query("query") query: String): Call<PlaceResponse>
    //接口5:https://www.baidu.com/data/<id>
    @DELETE("data/{id}")
    fun deleteData(@Path("id") id: String): Call<ResponseBody>    //该泛型表示能接受任意类型切不会进行解析
    //接口6:https://www.baidu.com/data/create{"id": 1, "content": "The description for this data."}
    @POST("data/create")
    fun createData(@Body data: Data): Call<ResponseBody>    //将Data对象中的数据转换成JSON格式的文本,并放到HTTP请求的body部分
    //接口7:http://example.com/get_data.json
    //      User-Agent: okhttp    //header参数就是键值对
    //      Cache-Control: max-age=0
    //静态声明
    @Headers("User-Agent: okhttp", "Cache-Control: max-age=0")
    @GET("get_data.json")
    fun getData(): Call<Data>
    //动态声明
    @GET("get_data.json")
    fun getData(@Header("User-Agent") userAgent: String, @Header("Cache-Control") cacheControl: String): Call<Data>
}

2.3.3 构建Retrofit对象

val retrofit = Retrofit.Builder()
    .baseUrl("https://www.baidu.com/")    //配置重复的根路径
    .addConverterFactory(GsonConverterFactory.create())    //指定解析数据使用的转换库(这里是Gson)
    .build()

2.3.4 创建API接口实例并调用访问函数

//创建动态代理对象
val personService = retrofit.create(PersonService::class.java)
//调用访问函数
personService.getPerson().enqueue(object : Call<List<person>> {    //根据注解中配置的地址进行网络请求
    override fun onResponse(call: Call<List<person>>, response: Response<List<person>>) {
        val list = response.body()    //得到解析后的对象
    }
    override fun onFailure(call: Call<List<person>>, t: Trouble) {
        t.printStackTrace()
    }
})

2.3.5 优化

object GlobalRetrofit {
    private const val BASE_URL = "www.baidu.com/"
    val retrofit: Retrofit = Retrofit.Builder()
        .baseUrl(BASE_URL)
        .addConverterFactory(GsonConverterFactory.create())
        .build()
    //fun <T> create(serviceClass: Class<T>): T = retrofit.create(serviceClass)
    inline fun <reified T> create(): T = create(T::class.java)
}
//使用
val personService = GlobalRetrofit.create<PersonService>()

到此这篇关于Android网络访问之Retrofit使用教程的文章就介绍到这了,更多相关Android Retrofit内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Android网络访问之Retrofit使用教程

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Android网络访问之Retrofit使用教程

Retrofit 是一个 RESTful 的 HTTP 网络请求框架的封装,网络请求的工作本质上是 OkHttp 完成,而 Retrofit 仅负责 网络请求接口的封装
2022-12-14

Android开发之HTTP访问网络

本文实例为大家详细介绍了Android开发之HTTP访问网络的相关代码,供大家参考,具体内容如下代码1:package com.ywhttpurlconnection; import android.app.Activity; import
2022-06-06

Android入门之使用OKHttp组件访问网络资源

这篇文章主要为大家详细介绍了Android如何使用OKHttp组件访问网络资源功能,文中的示例代码讲解详细,具有一定的借鉴价值,需要的可以参考一下
2022-12-26

android端使用volley访问网络接口的使用

android端使用volley访问网络接口的使用 -------------------------------------准备工作------------------------------------- 1、我们要使用到一个名叫vol
2022-06-06

Android中Retrofit+OkHttp进行HTTP网络编程的使用指南

Retrofit介绍: Retrofit(GitHub主页https://github.com/square/okhttp)和OkHttp师出同门,也是Square的开源库,它是一个类型安全的网络请求库,Retrofit简化了网络请求流程,
2022-06-06

开启SQL Server网络访问的详细教程(图文)

前言目前工作中很少用到SQL Server了,最近需要测试几个js表,需要搭建一个SQL Server数据库服务,这里做个总结吧。安装这里就不做详细介绍了,本文只介绍如何开启SQL Server网络访问。1、云服务器安全组设置如果是
开启SQL Server网络访问的详细教程(图文)
2024-09-12

android教程使用webview访问https的url处理sslerror示例

在Android中,WebView是用来load http和https网页到本地应用的控件。在默认情况下,通过loadUrl(String url)方法,可以顺利load诸如,http://www.baidu.com之类的页面。但是,当lo
2022-06-06

python之urllib使用代理访问网页

在写爬虫前,先去xicidaili.com上面随便找两个免费的代码如下#coding:utf-8__author__=www.py3study.comimporturllib.requestimportrandomurl=http://ww
2023-01-30

Android入门之ProgressBar的使用教程

Android里的ProgressBar默认为一个不断转圈的圆,它也可以自定义。这篇文章主要通过示例和大家介绍下ProgressBar的使用,感兴趣的可以了解一下
2022-11-13

C#中如何使用多线程并发访问网络资源

C#中如何使用多线程并发访问网络资源,需要具体代码示例在现代网络应用程序中,对于许多任务来说,并发性是至关重要的。多线程以及异步编程技术可以提高网络请求和处理数据的效率,并使用户体验更加流畅。在C#中,我们可以使用多线程来实现并发访问网络资
2023-10-22

Android入门之SwitchButton的使用教程

SwitchButton是个什么样的东西呢?其实它就是一个开关。我们在手机应用中经常使用到的。本文就来聊聊Android中的SwitchButton的使用,需要的可以参考一下
2022-11-13

Android入门之TextClock的使用教程

TextClock是在Android4.2(API17)后推出的用来替代DigitalClock的一个控件。本文将为大家详细说说TextClock的使用,感兴趣的小伙伴可以了解一下
2022-11-16

Android入门之Fragment的使用教程

Fragment是Android3.0后引入的一个新的API,他出现的初衷是为了适应大屏幕的平板电脑。本文主要来和大家讲讲Fragment的使用,感兴趣的小伙伴可以了解一下
2022-12-15

Android入门之ScrollView的使用教程

我们经常可以看到在手机里正在垂直加载一堆的数据,然后过一会加载得内容过多,到了手机的底部了,垂直方向就会出现一个“滚动条”。本文就来通过一些示例和大家介绍下ScrollView(滚动条)的使用,感兴趣的可以了解一下
2022-11-13

Android入门之Toast的使用教程

Toast是一种很方便的消息提示框,会在屏幕中显示一个消息提示框,没任何按钮,也不会获得焦点一段时间过后自动消失!非常常用!本文就来通过一个例子把Toast的使用讲透
2022-11-21

Python的requests网络编程包使用教程

早就听说requests的库的强大,只是还没有接触,今天接触了一下,发现以前使用urllib,urllib2等方法真是太搓了…… 这里写些简单的使用初步作为一个记录一、下载 官方项目页: https://pypi.python.org/py
2022-06-04

android开发教程之android的handler使用方法

Android Handler的使用,在讲Handler之前,我们先提个小问题,就是如何让程序5秒钟更新一下Title.首先我们看一下习惯了Java编程的人,在不知道Handler的用法之前是怎么样写的程序,代码如下所示:代码如下:pack
2022-06-06

android开发教程之startActivityForResult使用方法

最近做的一个小东西遇到这样的情况,我从一个页面MainActivity修改一些内容,需要跳转到一个新的EditActivity去做修改操作,修改完成后就回到之前的MainActivity,因为信息被修改了,最好还是从服务器上重新获取一下,那
2022-06-06

Retrofit网络请求框架之注解解析和动态代理方法怎么使用

本篇内容介绍了“Retrofit网络请求框架之注解解析和动态代理方法怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Retrofit是
2023-07-05

编程热搜

  • Android:VolumeShaper
    VolumeShaper(支持版本改一下,minsdkversion:26,android8.0(api26)进一步学习对声音的编辑,可以让音频的声音有变化的播放 VolumeShaper.Configuration的三个参数 durati
    Android:VolumeShaper
  • Android崩溃异常捕获方法
    开发中最让人头疼的是应用突然爆炸,然后跳回到桌面。而且我们常常不知道这种状况会何时出现,在应用调试阶段还好,还可以通过调试工具的日志查看错误出现在哪里。但平时使用的时候给你闹崩溃,那你就欲哭无泪了。 那么今天主要讲一下如何去捕捉系统出现的U
    Android崩溃异常捕获方法
  • android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
    系统的设置–>电池–>使用情况中,统计的能耗的使用情况也是以power_profile.xml的value作为基础参数的1、我的手机中power_profile.xml的内容: HTC t328w代码如下:
    android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
  • Android SQLite数据库基本操作方法
    程序的最主要的功能在于对数据进行操作,通过对数据进行操作来实现某个功能。而数据库就是很重要的一个方面的,Android中内置了小巧轻便,功能却很强的一个数据库–SQLite数据库。那么就来看一下在Android程序中怎么去操作SQLite数
    Android SQLite数据库基本操作方法
  • ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
    工作的时候为了方便直接打开编辑文件,一些常用的软件或者文件我们会放在桌面,但是在ubuntu20.04下直接直接拖拽文件到桌面根本没有效果,在进入桌面后发现软件列表中的软件只能收藏到面板,无法复制到桌面使用,不知道为什么会这样,似乎并不是很
    ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
  • android获取当前手机号示例程序
    代码如下: public String getLocalNumber() { TelephonyManager tManager =
    android获取当前手机号示例程序
  • Android音视频开发(三)TextureView
    简介 TextureView与SurfaceView类似,可用于显示视频或OpenGL场景。 与SurfaceView的区别 SurfaceView不能使用变换和缩放等操作,不能叠加(Overlay)两个SurfaceView。 Textu
    Android音视频开发(三)TextureView
  • android获取屏幕高度和宽度的实现方法
    本文实例讲述了android获取屏幕高度和宽度的实现方法。分享给大家供大家参考。具体分析如下: 我们需要获取Android手机或Pad的屏幕的物理尺寸,以便于界面的设计或是其他功能的实现。下面就介绍讲一讲如何获取屏幕的物理尺寸 下面的代码即
    android获取屏幕高度和宽度的实现方法
  • Android自定义popupwindow实例代码
    先来看看效果图:一、布局
  • Android第一次实验
    一、实验原理 1.1实验目标 编程实现用户名与密码的存储与调用。 1.2实验要求 设计用户登录界面、登录成功界面、用户注册界面,用户注册时,将其用户名、密码保存到SharedPreference中,登录时输入用户名、密码,读取SharedP
    Android第一次实验

目录