iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Retrofit框架怎么在Android中使用
  • 694
分享到

Retrofit框架怎么在Android中使用

2023-06-14 07:06:06 694人浏览 薄情痞子
摘要

Retrofit框架怎么在Android中使用?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Android是什么Android是一种基于linux内核的自由及开放源代码的操作系

Retrofit框架怎么在Android中使用?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

Android是什么

Android是一种基于linux内核的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由美国Google公司和开放手机联盟领导及开发

Retrofit介绍

Retrofit是Square开源的一款基于OkHttp(也是他家的)封装的网络请求框架,主要的网络请求还是OkHttp来完成,Retrofit只是对OkHttp进行了封装,可以让我们更加简单方便的使用,目前大部分公司都在使用这款框架,Retrofit的原理也是面试必问的问题之一了,所以我们不仅要会使用,也要对其实现原理有一个大概的了解。

本片文章从使用角度来说,不对的地方希望大家在评论区交流,我会及时改进,共同进步,文章中的demo可以从GitHub下载。

Retrofit优点

Retrofit的大部分配置是通过注解来实现的,配置简单,使用方便;支持多种返回类型包括RxJava和协程,可以配置不同的解析器来进行数据解析,如JSON,xml等

Retrofit的使用

以下代码全部为Kotlin语言编写,毕竟现在Kotlin也是大势所趋了。

1.引入依赖项

github地址:github.com/square/retr…

implementation 'com.squareup.retrofit2:retrofit:2.9.0'//支持Gson解析json数据implementation 'com.squareup.retrofit2:converter-gson:2.9.0'//支持RxJava返回类型implementation "com.squareup.retrofit2:adapter-rxjava2:2.9.0"implementation "io.Reactivex.rxjava2:rxandroid:2.0.2"//支持协程,Retrofit2.6.0及以上版本不需要引入,Retrofit内置已经支持//implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2'

2.添加网络权限

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

3.编写Retrofit辅助类

首先定义一个RetrofitHelper辅助类,编写Retrofit单例,Retrofit内部已经维护了线程池做网络请求,不需要创建多个

注:BASE_URL必须为 "/" 结尾

object RetrofitHelper {  //baseUrl根据自己项目修改 private const val BASE_URL = "https://www.baidu.com" private var retrofit: Retrofit? = null private var retrofitBuilder: Retrofit.Builder? = null  //Retrofit初始化 fun init(){  if (retrofitBuilder == null) {   val client = OkHttpClient.Builder()    .connectTimeout(20, TimeUnit.SECONDS)    .readTimeout(20, TimeUnit.SECONDS)    .writeTimeout(20, TimeUnit.SECONDS)    .build()   retrofitBuilder = Retrofit.Builder()    .baseUrl(BASE_URL)    //支持Json数据解析    .addConverterFactory(GsonConverterFactory.create())    //支持RxJava返回类型    .addCallAdapterFactory(RxJava2CallAdapterFactory.create())    .client(client)  }  retrofit = retrofitBuilder!!.build() } fun getRetrofit():Retrofit{  if (retrofit == null) {   throw IllegalAccessException("Retrofit is not initialized!")  }  return retrofit!! }}

然后再Application中进行初始化

class App:Application() { override fun onCreate() {  super.onCreate()  RetrofitHelper.init() }}

在Manifest文件中指定Application

<application android:name=".App" android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:networkSecurityConfig="@xml/network_security_config" android:theme="@style/Theme.RetrofitDemo"> <activity android:name=".MainActivity">  <intent-filter>   <action android:name="android.intent.action.MAIN" />   <category android:name="android.intent.category.LAUNCHER" />  </intent-filter> </activity></application>

Android P系统限制了明文流量的网络请求 解决的办法有2种 1.把所有的http请求全部改为https请求 2.在res的xml目录(),然后创建一个名为:network_security_config.xml文件

<?xml version="1.0" encoding="utf-8"?><network-security-config><base-config cleartextTrafficPermitted="true" /></network-security-config>

4.定义apiService

首先我们先用一个最简单的GET请求来试一下,这个接口是请求天气情况的,免费的

interface Api { @GET("http://www.weather.com.cn/data/sk/{cityCode}.html") fun getWeather(@Path("cityCode")code:String):Observable<WeatherInfo>}

定义返回类型,为了方便打印,用的data class 类型

data class WeatherInfo( var weatherinfo:Info?=null) {   data class Info(  var city:String?,  var cityid:String?,  var temp:String?,  var WD:String?,  var WS:String?,  var SD:String?,  var AP:String?,  var njd:String?,  var WSE:String?,  var time:String?)}

首先用@GET注解表示该借口为get请求,GET注解的value为请求地址,完整的请求地址为baseUrl+value,如value为完整地址,则会使用value为请求地址,一般通用情况下baseUrl = "www.weather.com.cn/", 然后GET("data/sk/{cityCode}.html") @Path是网址中的参数,用来替换。

5.实现接口方法

1RxJava方法实现

class RetrofitViewModel:ViewModel() { private val disposables:CompositeDisposable by lazy {  CompositeDisposable() } fun aDDDisposable(d:Disposable){  disposables.add(d) } val weatherLiveData = MutableLiveData<WeatherInfo>() fun getWeather(){  RetrofitHelper.getRetrofit().create(Api::class.java).getWeather("101010100")   .subscribeOn(Schedulers.io())   .observeOn(AndroidSchedulers.mainThread())   .subscribe(object :Observer<WeatherInfo>{    override fun onComplete() {}    override fun onSubscribe(d: Disposable) {     addDisposable(d)    }    override fun onNext(t: WeatherInfo) {     weatherLiveData.value = t    }    override fun onError(e: Throwable) {    }   }) } override fun onCleared() {  super.onCleared()  disposables.clear() }}

这里是用ViewModel中做的操作,如果是MVP模式放在Presenter中进行就好,首先通过Retrofit单例调用Service的对象的getWeather方法,指定上下游事件的线程,创建观察者对象进行监听,在onNext方法中拿到返回结果后回调给Activity,数据回调用的是LiveData,在Activity中操作如下

class MainActivity : AppCompatActivity() {  private val viewModel by viewModels<RetrofitViewModel>() private var btnWeather: Button? = null private var tvWeather: TextView? = null override fun onCreate(savedInstanceState: Bundle?) {  super.onCreate(savedInstanceState)  setContentView(R.layout.activity_main)  viewModel.weatherLiveData.observe(this, Observer {   tvWeather?.text = it.toString())  })  btnWeather = findViewById<Button>(R.id.btnWeather)  tvWeather = findViewById(R.id.tvWeather)  btnWeather?.setOnClickListener {   viewModel.getWeather()  } }}

在Activity中

创建ViewModel对象

注册LiveData的回调

获取天气情况

如下图所示

Retrofit框架怎么在Android中使用

看完上述内容,你们掌握 Retrofit框架怎么在Android中使用的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注编程网精选频道,感谢各位的阅读!

--结束END--

本文标题: Retrofit框架怎么在Android中使用

本文链接: https://www.lsjlt.com/news/269144.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • Retrofit框架怎么在Android中使用
    Retrofit框架怎么在Android中使用?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Android是什么Android是一种基于Linux内核的自由及开放源代码的操作系...
    99+
    2023-06-14
  • Android Retrofit框架的使用
    目录Retrofit介绍 Retrofit优点 Retrofit的使用 1.引入依赖项 2.添加网络权限3.编写Retrofit辅助类 4.定义ApiService 5.实现接口方法...
    99+
    2024-04-02
  • Github简单易用的 Android ViewModel Retrofit框架
    目录RequestViewModelGradle使用1.retrofit接口的声明2.retrofit配置3.在Activity或Fragment中创建请求对象4.继承Request...
    99+
    2024-04-02
  • Android RxJava与Retrofit怎么结合使用
    本篇内容介绍了“Android RxJava与Retrofit怎么结合使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!添加依赖c...
    99+
    2023-07-05
  • android one框架怎么使用
    Android One 是谷歌推出的一款针对低端设备的 Android 系统框架,旨在提供更好的性能和更长的软件更新周期。要使用 A...
    99+
    2023-10-23
    android
  • Glide图片加载框架怎么在Android应用中使用
    这篇文章将为大家详细讲解有关Glide图片加载框架怎么在Android应用中使用,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。简介Glide是一款图片加载框架,可以在Android平台上以简...
    99+
    2023-05-31
    android glide roi
  • 怎么在Android中利用Retrofit 2.X 上传文件
    怎么在Android中利用Retrofit 2.X 上传文件?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Body方式:1、Retrofit接口RetrofitInterf...
    99+
    2023-05-30
    retrofit android
  • 怎么在php中使用Zend框架
    这篇文章给大家介绍怎么在php中使用Zend框架,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。PHP开发环境搭建工具有哪些一、phpStudy,是一个新手入门最常用的开发环境。二、WampServer,WampServ...
    99+
    2023-06-14
  • 怎么在java中使用mybatis框架
    怎么在java中使用mybatis框架?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Java的特点有哪些Java的特点有哪些1.Java语言作为静态面向对象编程...
    99+
    2023-06-14
  • 怎么在java中使用Spring框架
    怎么在java中使用Spring框架?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Java是什么Java是一门面向对象编程语言,可以编写桌面应用程序、Web应用程序、分布式系统...
    99+
    2023-06-14
  • 怎么在php中使用swoft框架
    本篇文章为大家展示了怎么在php中使用swoft框架,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。PHP开发环境搭建工具有哪些一、phpStudy,是一个新手入门最常用的开发环境。二、WampSer...
    99+
    2023-06-14
  • Android中如何使用Atlas框架
    本篇文章为大家展示了Android中如何使用Atlas框架,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。  Atlas是什么  Atlas是一个Android客户端容器框架,主要提供了组件化、动态性...
    99+
    2023-06-02
  • Android中如何使用Glide框架
    本篇文章为大家展示了Android中如何使用Glide框架,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。加载网络图片引入对应的库compile 'com.android.suppo...
    99+
    2023-06-04
  • Android存储访问框架怎么使用
    这篇文章主要讲解了“Android存储访问框架怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Android存储访问框架怎么使用”吧!存储访问框架,简称:SAF, 就是系统文件选择器+...
    99+
    2023-06-26
  • 怎么在shiro使用ssm框架
    本篇文章为大家展示了怎么在shiro使用ssm框架,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1.在pom.xml中引入依赖<!--  shiro -->...
    99+
    2023-06-14
  • 怎么在python中使用feapde爬虫框架
    怎么在python中使用feapde爬虫框架?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。python是什么意思Python是一种跨平台的、具有解释性、编译性、互动性和面向对象...
    99+
    2023-06-14
  • 怎么在Android中使用LinearLayout设置边框
    本篇文章为大家展示了怎么在Android中使用LinearLayout设置边框,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。定一个underline的xml文件,把它放到drawable下under...
    99+
    2023-05-30
    android linearlayout
  • Volley网络请求框架如何在Android 应用中使用
    Volley网络请求框架如何在Android 应用中使用?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。首先第一步用到的RequetQueueRequestQueue.Java&...
    99+
    2023-05-31
    android volley roi
  • 如何在Dreamweaver中使用框架
    今天就跟大家聊聊有关如何在Dreamweaver中使用框架,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。  增加新框架      要给框架页面增加新框架,就是像拆分表格的单...
    99+
    2023-06-08
  • Gin框架中bind怎么使用
    本篇内容主要讲解“Gin框架中bind怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Gin框架中bind怎么使用”吧!概述Gin框架中,有bind函数可以非常方便的将url的查询参数qu...
    99+
    2023-06-22
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作