Retrofit和Rxjava的简单使用

Retrofit和RxJava结合实现网络请求 Retrofit和RxJava结合,实现网络请求处理。。。。。。 立即下载

在Android开发中,网络请求是非常常用的。而Retrofit这个开源库是当下最火的网络请求库。下面是Retrofit的简介:

还有就是在Android中,有一个主线程,只有在此线程中才可以更新UI,而网络请求是耗时,为了提高用户体验,就规定耗时的操作基本都得放在子线程中。以往我们网络请求完之后是通过Handler、AsyncTask和runOnUiThread。在面试中前两个也是面试的重中之重来的,经常会被问到的。

而现在最火的一个异步库就是Rxjava了,它利用观察者模式很好的解决了子线程与主线程之间的通信。即使业务逻辑复杂起来,它依旧可以做到简洁明了。
如果想要详细了解Rxjava,这里有一篇介绍的蛮详细的:给 Android 开发者的 RxJava 详解

接下来正式使用Retrofit和Rxjava写一个简单的登陆Demo。我在本地简单的写了一个登录响应,返回的json数据是:
这里写图片描述

准备好之后就新建一个Android项目,先添加一下所需的依赖:

//retrofit2
    implementation 'com.google.code.gson:gson:2.8.1'
    implementation 'com.squareup.retrofit2:retrofit:2.3.0'
    implementation 'com.squareup.retrofit2:converter-gson:2.3.0'
    implementation 'com.squareup.okhttp3:okhttp:3.8.1'
    implementation 'com.squareup.okhttp3:logging-interceptor:3.8.1'

//rxjava2
    implementation 'io.reactivex.rxjava2:rxjava:2.1.0'
    implementation 'io.reactivex.rxjava2:rxandroid:2.0.1'

//配合Rxjava2 使用
    implementation 'com.jakewharton.retrofit:retrofit2-rxjava2-adapter:1.0.0'

完了点击刷新,添加一个json数据的实体类:

public class UserInfoModel {

    public int code;
    public UserInfo data;
    public String message;

    public static class UserInfo{
        public int id;
        public String username;
        public String email;
        public String tel;
    }

    @Override
    public String toString() {
        return "UserInfoModel{" +
                "code=" + code +
                "\n, data{ id=" + data.id +
                "\n, username=" + data.username +
                "\n, email=" + data.email +
                "\n, tel=" + data.tel +
                "},\n message='" + message + '}';
    }
}

再添加一个service,里面是请求时用到的方法:

public interface UserMsgService {

    /**
     * 请求登陆的方法,需要两个参数,用的是POST方式
     *
     * @param username 用户名
     * @param password 密码
     * @return
     */
    @POST("BackStageSystem/servlet/LoginServlet")
    Observable<UserInfoModel> login(@Query("username") String username, @Query("password") String password);
}

最后就在Activity里面进行简单的请求:

public class MainActivity extends AppCompatActivity {
    private static final String BASE_URL = "http://192.168.6.109:8080/";
    private TextView tv_content;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tv_content = findViewById(R.id.tv_content);
    }

    public void onAction(View view) {


        //创建Retrofit对象
        Retrofit retrofit = new Retrofit.Builder().baseUrl(BASE_URL)
                .addConverterFactory(GsonConverterFactory.create())
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .build();

        //获取UserMsgService对象
        UserMsgService userMsgService = retrofit.create(UserMsgService.class);

        userMsgService.login("zhangsan", "123456")
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer<UserInfoModel>() {
                    @Override
                    public void onSubscribe(Disposable d) {

                    }

                    @Override
                    public void onNext(UserInfoModel userInfoModel) {
                        tv_content.setText(userInfoModel.toString());
                    }

                    @Override
                    public void onError(Throwable e) {
                        //请求失败的情况
                    }

                    @Override
                    public void onComplete() {

                    }
                });

    }
}

布局文件就是一个按钮和显示文本,非常的简单明了。

运行一下查看一下结果:
这里写图片描述

以上只是简单的使用,Retrofit和Rxjava还有很多很高深的用法,之后再深入研究。

RxHttp:对RxJava2+Retrofit2+OkHttp3的封装 RxHttp 对RxJava2+Retrofit2+OkHttp3的封装,优雅实现接口请求和文件下载 功能简介 网络请求(RxRequest) 支持监听请求声明周期,如开始结束和网络错误 支持多BaseUrl,可针对不同请求重定向 支持针对不同请求设置不同缓存策略,如无网强制获取缓存,有网缓存有效10秒 支持添加公共请求参数 支持自定义异常处理和异常提示消息 文件下载(RxDownload) 支持断点续传 支持下载进度回调 支持下载速度回调 支持下载过程状态监听 支持在仅保存下载路径未保存进度时自动恢复断点续传 支持自动获取真实文件名 发起请求之RxRequest 使用说明 一、初始化 新建网络请求配置类继承RequestSetting或DefaultRequestSetting,并复写部分方法。 public class RxHttpRequestSetting extends Defa 立即下载

相关推荐

Win11下DCMTK的Visual Studio 2022配置教程

最近有个新需求,需要完成读取和解析DICOM数据相关的SDK

qq_45797625的博客 3261

RxJava+Retrofit使用

引用 api 'com.alibaba:fastjson:1.2.70' api 'androidx.lifecycle:lifecycle-extensions:2.2.0' //rxbinding导入,已经包含rxjava和rxandroid,rxbinding-core是核心,其他只是效果上的辅助 api 'com.jakewharton.rxbinding4:rxbinding-core:4.0.0' api 'com.jakewharton.rxbinding4:rx.

黄孝果的博客 867

机器人开发路线

通过这个路线图,你可以在6个月内完成从原型到试产的全流程。建议初期采用敏捷开发模式,每两周迭代一个核心功能模块。在硬件集成遇到瓶颈时,推荐参考。

woody218的博客 744

Retrofit和RxJava讲解

一、什么是Retrofit? Retrofit,官方对他的描述是“一个类型安全的Android和java网络请求的客户端”,其实就是一个封装好的网络请求库。首先,在网上找一个API接口用于测试:https://api.douban.com/v2/book/search?q=金瓶梅&amp;tag=&amp;start=0&amp;count=1 这是一个用于查询一本书详细信息的请求接口。如果直接...

SongHao_的博客 4135

Python:同花顺全数据接口

# -*- coding: utf-8 -*- from iFinDPy import * from datetime import datetime import pandas as pd import time as _time import json from threading import Thread,Lock,Semaphore import requests sem = Semaphore(5) # 此变量用于控制最大并发数 dllock = Lock() #此变量用来控制实时行情推

代码过客 4万+

【解决方案】使用transformer指定显卡后,模型依然加载到默认第1张显卡上

按理说指定了环境变量为后面几张显卡,模型会自动加载到我们指定的显卡上。可是查看gpu使用情况,发现还是加载在了第一张显卡上,这是为啥呢?

m0_56745306的博客 2441

Retrofit和Rxjava的优势和区别

Retrofit 定义:它是一个基于Ok的网络请求框架。 优势: 1、使用更方便, 2、相对于Ok来说网络请求过程更加解耦,通过注解和动态代理的方式将请求体和请求过程分离。 3、并且还处理了Ok在使用过程中一些问题。回调结果的处理和对象映射(也就是实体类映射)的处理 4、通过提供的工厂方法工具实现实体类的映射,提供配置三方工厂的一些操作。 Retrofit使用注意: 1、注意注解的搭配使用,BaseUrl()必须以“/”结尾,注解:@GET,@POST等使用过程中注意事项 2、实体...

m0_47275081的博客 2283

汽车氛围灯 PCBA 方案开发:从技术底层解析车载光效的核心逻辑

摘要: 车载氛围灯PCBA方案开发需兼顾性能与车规要求。主控芯片选型应关注运算能力、温度适应性和低功耗(如NXPS32K344、复旦微FM33FG065A)。电路防护需采用TVS二极管等组合设计,满足ISO7637-2浪涌防护标准。通信协议分层应用(CAN+LIN),调光需解决色准与温漂问题,动态灯效通过FIFO队列实现。开发中需进行温度循环、振动、EMC等可靠性测试,细节处理(如三防涂覆)至关重要。该领域开发需熟悉车规标准并积累实车经验。

2401_87454052的博客 1132

RxJava与Retrofit实战总结

RxAndroid模块包含RxJava的Android特定的绑定代码。它给RxJava添加了一些类,用于帮助在Android应用中编写响应式(reactive)的组件。它提供了一个可以在给定的Android Handler上调度Observable的调度器 Scheduler,特别是在UI主线程上

Dylan Dev Blog 4291

企业华为TaurusDB数据库国产替代要点全记录

国产化数据库全方位对比、从互联网企业的先进经验来看mysql的用法、及sql优化、sql异构修改、及数据同步方面都做了一些讲解

深耕互联网的码农,在AI及国产化浪潮下,希望把自己的能力输出给更多的人 1063

水下机器人仿真平台选型指南:从AirSim到Unity3D的深度对比

本文深入对比了AirSim+UE和Unity3D两大水下机器人仿真平台的核心架构、传感器仿真能力和水下环境建模特点。AirSim+UE凭借高精度物理仿真和丰富传感器支持成为专业研发首选,而Unity3D则以快速开发和灵活扩展见长。文章为研发团队提供了全面的选型指南,帮助优化水下实验的仿真效率与成本。

weixin_29009669的博客 450

android——retrofit+rxjava超级详细讲解与使用

在自我学习的过程中,和项目中,使用到了retrofit+rxjava访问接口,记录一下自己的学习过程,可能有不准确或者不到位的地方,请指正,嘻嘻!!!

weixin_45552475的博客 9991

一篇文章带你快速入门 MATLAB

文章目录一、认识 MATLAB 界面二、MATLAB 的运行方式三、Matlab 中的窗口1. 命令窗口2. MATLAB的程序编辑窗口3. 工作空间窗口4. 命令历史窗口5. 图形窗口6. 当前目录窗口四、MATLAB的帮助系统1. 帮助命令2. 联机帮助五、其他知识补充1. MATLAB的搜索路径2. 变量命名规则3. M文件命名规则 一、认识 MATLAB 界面 在 MATLAB Desktop 中,工具条取代了菜单和工具栏。应用程序库收纳了 MATLAB 产品系列的应用程序,单一文件应用程序打包为一

南淮北安的博客 5126

Android 简单封装 RxJava + Retrofit

如今RxJava和Retrofit的结合使用估计已经相当普遍了,自己工作中也是一直都在使用。在使用的过程中我们都会对其进行封装使用,GitHub上也有很多封装好的项目可以直接拿来使用,其实对于开源框架的二次封装有时候针对不同的业务逻辑封装的过程中也多多少少有些不同,建议还是自己动手去封装使用。这样不仅提升自己对原框架的理解,还可以提高自己的封装能力。在工作过程中如需要改动便更加容易入手。好了,废话...

萌动小彩笔的博客 524

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

retrofit2 + rxjava2 简单封装使用

使用效果 NetWork.getInstance().doLogin(userName, password, new NetBackListener<ResLogin>() { @Override public void onError(String msg) { ...

Mr.小二 409

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

安卓:Retrofit与RxJAVA做一个简单的Get请求

首先导入依赖: RxJava:原理 基于 一种扩展的观察者模式 被观察者 (Observable) 通过 订阅(Subscribe) 按顺序发送事件 给观察者 (Observer), 观察者(Observer) 按顺序接收事件 以及作出对应的响应动作 implementation'io.reactivex.rxjava2:rxjava:2.2.8' implementation'io.reacti...

风尘的博客 656

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

retrofit2+RxJava简单使用

刚学习Android的网络开发,记录起来,作个纪念。 使用Android Studio开发。 配置build.gradle compile 'com.squareup.retrofit2:retrofit:2.1.0' compile 'com.squareup.retrofit2:converter-gson:2.1.0' compile 'com.squareup.ret

Net_Wolf_007的专栏 853

Android 之路 (1) - RxJava2+Retrofit实现简单登陆

前言 使用RxJava2+Retrofit实现简单登陆。 正文 1. Hello world 1.1 相关版本 Android Studio 3.1.3 Gradle 3.1.3 targetSdkVersion 26 support版本 26.0.2 1.2 创建项目 项目的UI方面选用Design和support,所以在创建项目的时候直接选择【Basic Activity】,AS会自动配...

AndroidRookie 544

RxJava+Retrofit 简单结合

RxJava+Retrofit 简单结合

~~代码中的南城故事,南城故事里的中分女王。 222

rxjava+retrofit简单demo

rxjava+retrofit简单入门demo1、rxjava的三个行为1、观察者Subscriber2、被观察者Observable3、订阅关系observable.subscribe(subscriber)2、rxjava示例请求apihttp://api.map.baidu.com/telematics/v3/movie?qt=hot_movie&location=北京&output=json

androidxiaogang的博客 803

【Android -- 网络请求】Rxjava + Retrofit 简单封装

Retrofit: 是 Square 公司开发的一款正对Android 网络请求的框架。底层基于OkHttp 实现,OkHttp 已经得到了google 官方的认可。RxJava 就是一种用 Java 语言实现的响应式编程,是一个基于事件订阅的异步执行的一个类库,核心思想是观察者模式。...

Kevin Learn Android 1943

Retrofit 和 Rxjava 的简单实用

最近在整理 Retrofit 和 Rxjava 的知识,前面几篇文章分别整理了 Rxjava 和 Retrofit 现在就来整理一下Retrofit 和 Rxjava的连用。知道了Retrofit 和 Rxjava 的单独用法,连用其实很简单。在Retrofit的基础上改。 不一样的地方有如下几点: 第一,导的包不一样 Retrofit中: compile 'com.s...

流星魂小七的博客 361

MVP+Retrofit+RxJava简单事例

早都想撸一个demo出来总结一下加深理解的,也想搞的深入一点,但是发现越深入反而越不好总结,只好先作罢,所以目前本文只是简单事例(大佬跳过)。MVP 简化Activity,以接口的方式实现M层和V层的交互,所以在定义接口前一定要先想好业务逻辑,这样接口写起来也比较便捷,不然的话就是写着写着,诶少个接口啊,然后回来又写个接口,这样的情况一次还好,一多就影响开发效率了。 Retrofit 其实是

yechaoa 931

Rxjava+Retrofit简单使用

retrofit通过网络线程获得的数据,数据只能在网络线程中使用,无法传递到主线程中。所以可以用rxjava的观察者模式使数据提取在主线程中使用。

qq_56611561的博客 916

RxJava 与 Retrofit 的简单实践

最近一段时间简单的应用了一下rxjava 和 retrofit,废话不多说直接写我实践的过程和大家分享,希望和大家切磋,有不对的希望大家批评指正。 前提:对rxjava和retrofit有一个简单的基本了解,RxJava可以参考http://gank.io/post/560e15be2dca930e00da1083#toc_3 Retrofit 可以参考http://www.jcodecrae

萝卜_兔子 904

简单的封装retrofit+RXJava

package com.mjd.imitate_jd.utils; import com.mjd.imitate_jd.api.GetInterface; import java.util.concurrent.TimeUnit; import okhttp3.OkHttpClient; import okhttp3.logging.HttpLoggingInterceptor; impo...

lucky6868的博客 289
上一篇: 简单的入门Android开发
下一篇: 自定义View之Paint(画笔)的详解
LayneYao
博客等级 码龄10年 449粉丝 130原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值