Android 使用 Retrofit 发送网络请求

Android 网络请求库Retrofit使用详解 1、首先在Android项目中引入需要的依赖。2、创建一个单例类,返回Retrofit对象。 阅读详情

简介

在Android应用中,如果不是单机的话,应该都有请求后端接口API的情况,本篇文章就介绍下Retrofit在Android中如何进行使用的

相关代码

我们以一个简单的登录接口为例

完整代码GitHub上有:https://github.com/lw1243925457/self_growth_android

仅做代码参考,目前数据监控上传是有了,但界面这些还很粗糙,没有完善

相关的依赖引入

首先我们在工程中引入相关的依赖:

    implementation 'com.squareup.okhttp3:okhttp:4.5.0'
    implementation 'com.squareup.retrofit2:retrofit:2.9.0'
    implementation 'com.squareup.retrofit2:converter-gson:2.9.0'

相关的手机权限开启

需要在文件中开启网络权限:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.selfgrowth">

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

    <application
    ......
    </application>

</manifest>

配置Retrofit Client

Client的相关配置:单例,配置基于OKHTTP,Gson序列化;OKHTTP中添加了请求拦截器

@Data
public class RetrofitClient {

    private static final RetrofitClient instance = new RetrofitClient();

    private final Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(HttpConfig.ADDRESS) //基础url,其他部分在GetRequestInterface里
            .client(httpClient())
            .addConverterFactory(GsonConverterFactory.create()) //Gson数据转换器
            .build();

    public static RetrofitClient getInstance() {
        return instance;
    }

    private OkHttpClient httpClient() {
        return new OkHttpClient.Builder()
                .addInterceptor(new AccessTokenInterceptor())
                .connectTimeout(20, TimeUnit.SECONDS)
                .build();
    }
}

配置通用的请求拦截器

比如在请求中,带上Authorization等

public class AccessTokenInterceptor implements Interceptor {

    @NonNull
    @Override
    public Response intercept(@NonNull Chain chain) throws IOException {
        if (UserCache.getInstance().getToken() == null) {
            return chain.proceed(chain.request());
        }

        Request original = chain.request();
        Request.Builder requestBuilder = original.newBuilder()
                .addHeader("Authorization", UserCache.getInstance().getToken());
        Request request = requestBuilder.build();
        return chain.proceed(request);
    }
}

Retrofit接口定义

登录请求的接口定义:

public interface UserApi {

    /**
     * 用户登录
     **/
    @POST("auth/user/login")
    Call<ApiResponse> login(@Body LoginUser user);
}

Retrofit Request具体请求编写

我们首先定义一个抽象类,在其中持有我们的RetrofitClient全局类,在其中发起请求,由于Android UI的形式,请求是异步的

public abstract class Request {

    final Retrofit retrofit;

    public Request() {
        this.retrofit = RetrofitClient.getInstance().getRetrofit();
    }

    /**
     * 发送网络请求(异步)
     * @param call call
     */
    void sendRequest(Call<ApiResponse> call, Consumer<? super Object> success, Consumer<? super Object> failed) {
        call.enqueue(new Callback<ApiResponse>() {
            @Override
            public void onResponse(Call<ApiResponse> call, Response<ApiResponse> response) {
                if (response.code() != 200) {
                    Log.w("Http Response", "请求响应错误");
                    failed.accept(response.raw().message());
                    return;
                }
                if (response.body() == null || response.body().getData() == null) {
                    success.accept(null);
                    return;
                }
                Object res = response.body().getData();
                if (String.valueOf(res).isEmpty()) {
                    success.accept(null);
                    return;
                }
                success.accept(res);
            }

            @Override
            public void onFailure(Call<ApiResponse> call, Throwable t) {
                System.out.println("GetOutWarehouseList->onFailure(MainActivity.java): "+t.toString() );
            }
        });
    }
}

如上所示,请求成功就执行success相关的逻辑,失败则执行failed相关的逻辑

登录请求的具体逻辑如下:构造Retrofit Interface,发起请求

public class UserRequest extends Request {

    public void login(LoginUser user, Consumer<? super Object> success, Consumer<? super Object> failed) {
        UserApi request = retrofit.create(UserApi.class);
        Call<ApiResponse> call = request.login(user);
        sendRequest(call, success, failed);
    }
}

Android UI中进行调动

使用示例如下,点击一个登录按钮后触发

public class LoginFragment extends Fragment {

    private final UserRequest userRequest = new UserRequest();

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_login, container, false);
        Button loginButton = rootView.findViewById(R.id.login_button);
        loginButton.setOnClickListener(view -> {
            EditText email = rootView.findViewById(R.id.login_email_edit);
            EditText password = rootView.findViewById(R.id.login_password_edit);

            final LoginUser user = LoginUser.builder()
                    .email(email.getText().toString())
                    .password(password.getText().toString())
                    .build();

            // 获取相关的用户名和密码后,调用登录接口
            userRequest.login(user, (token) -> {
                UserCache.getInstance().initUser(email.getText().toString(), token.toString());
                final SharedPreferences preferences = requireContext().getSharedPreferences("userInfo", Context.MODE_PRIVATE);
                final SharedPreferences.Editor edit = preferences.edit();
                edit.putString("username", email.getText().toString());
                edit.putString("password", password.getText().toString());
                edit.apply();
                Snackbar.make(view, "登录成功:" + token.toString(), Snackbar.LENGTH_LONG)
                        .setAction("Action", null).show();
            }, failedMessage -> {
                Snackbar.make(view, "登录失败:" + failedMessage, Snackbar.LENGTH_LONG)
                        .setAction("Action", null).show();
            });
        });
        return rootView;
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        final SharedPreferences preferences = getActivity().getSharedPreferences("userInfo", Activity.MODE_PRIVATE);
        final String userName = preferences.getString("username", "");
        final String password = preferences.getString("password", "");
        final EditText emailEdit = getView().findViewById(R.id.login_email_edit);
        final EditText passwordEdit = getView().findViewById(R.id.login_password_edit);
        emailEdit.setText(userName);
        passwordEdit.setText(password);
    }
}

总结

本篇文章中介绍了如Android学习中如何使用Retrofit发起网络请求

但由于吃初学,虽然感觉能用,但有点繁琐,不知道在实际的Android开发中,网络请求的最近实践是怎么样的,如果有的话,大佬可以在评论区告知下,感谢

论文阅读笔记:Extended Vision Transformer (ExViT) for Land Use and Land Cover Classification 注意力机制驱动的深度模型最近取得了成功,如最具代表性的视觉转换器(ViT),吸引了一波高级研究来探索它们对更广泛领域的适应。然而,遥感(RS)领域中基于Transformer的方法更关注单模态数据,这可能会在充分利用不断增长的多模态地球观测数据时失去可扩展性。为此,我们提出了一种新的多模式深度学习框架,通过在最小修改的情况下扩展传统的ViT,针对土地利用和土地覆盖(LULC)分类任务。 阅读详情

相关推荐

深入掌握英飞凌TriCore中断向量表

摘要:本文探讨了英飞凌Tc277芯片中断机制的原理与实现,重点解析了中断向量表基地址的链接文件定义方式、BIV寄存器的初始化过程以及每个中断条目的32字节空间分配规则。通过分析中断向量号(1-255)的计算方法,阐明了中断条目跳转地址(如STM0中断向量号37对应0x800F04A0)的生成逻辑。文章还揭示了.map文件中14字节跳转指令的组成原理,以及最终通过a14寄存器跳转到实际中断函数(如stm0Sr0ISR)的执行流程,为嵌入式开发人员理解中断处理机制提供了清晰的技术路径。

IT技术猿猴的博客 1710

Retrofit 详解+使用

Android kotlin Retrofi 详细使用讲解

qq_38367671的博客 3184

AI训练师团队管理运营思路

工具运营AI训练师主要是支撑运营,协助算法和运营提高托管机器人的解决能力,以协助降低业务场景熔断与优化场景识别为核心运营目标,通过算法聚类、标注分析等方式,结合业务知识,提供精准、清晰的标注数据和解决方案,确保训练效果满足需求。过程中需要与算法、运营一块参与模型搭建和数据验收,并且负责核心指标和数据日常的跟踪维护。④针对知识库已有意图进行梳理和分析,反馈运营评估缺失或合并意图优化方向。③对语料数据进行挖掘、清洗,解除缠绕、冗余等问题导致的未识别。①线上case分析,及时发现识别问题导致的托管熔断问题。

qq_25438419的博客 1084

Carson带你学Android:这是一份详细的 Retrofit使用教程(含实例讲解)

前言 在Andrroid开发中,网络请求十分常用 而在Android网络请求库中,Retrofit是当下最热的一个网络请求库 今天,我将献上一份非常详细Retrofit v2.0的使用教程,希望你们会喜欢。 如果对Retrofit v2.0的源码感兴趣,可看文章:Android:手把手带你深入剖析 Retrofit 2.0 源码 目录![目录](http://upload-

Carson带你学Android 25万+

COMSOL电磁仿真案例——感应线圈

COMSOL电磁建模仿真案例——感应线圈

冲击10w 6万+

瑞数6.5逆向实战:手把手教你用RPC搞定cookie sign加密(附环境补全技巧)

本文深入解析瑞数6.5逆向实战,重点探讨如何结合环境补全与RPC调用技术来应对其动态加密机制。文章详细介绍了环境指纹采集、双重验证等核心防护原理,并提供了基于Puppeteer的RPC实现方案,手把手教你搞定cookie sign加密,附有实用的环境补全技巧与完整代码示例。

weixin_29315091的博客 1268

Android retrofit2几种请求方式的使用以及简单封装

1添加依赖. implementation 'com.squareup.okhttp3:logging-interceptor:3.4.1' implementation 'com.squareup.okhttp3:okhttp:3.4.1' implementation 'com.squareup.retrofit2:retrofit:2.2.0' implementation 'co...

徐玮的博客 2604

MATLAB极坐标伪彩色圆图绘制之polarPcolor函数

polarPcolor函数介绍 我们经常在论文或期刊上看到如下图这种以色调冷暖代表数值大小的极坐标圆图, 而function [varargout] = polarPcolor(R,theta,Z,varargin)可以很好的帮助我们快速绘制这类极坐标圆图。它非常适合雷达或激光雷达的平面位置指示器。使用polarPcolor函数时,我们只需根据手中数据构造相应的二维矩阵Z即可,十分便捷。varargin值为绘制模式选择。R值为半径坐标一维矩阵,theta值为角坐标一维矩阵。 代码示例 这里使用了海洋表面耀光

qq_19512613的博客 1万+

详细的 Retrofit 2.0 使用教程

这是一份很详细的 Retrofit 2.0 使用教程(含实例讲解)前言在Andrroid开发中,网络请求十分常用而在Android网络请求库中,Retrofit是当下最热的一个网络请求库今天,我将献上一份非常详细Retrofit v2.0的使用教程,希望你们会喜欢。如果对Retrofit v2.0的源码感兴趣,可看文章:Android:手把手带你深入剖析 Retrofit 2.0 源码目录1. 简...

daimengs的博客 2008

【人工智能】拒绝焦虑,理性突围:AI 时代 Java 工程师的职业重构与进化指南

摘要:在AI技术快速发展的背景下,Java工程师面临职业转型挑战。本文通过MECE原则解构工作内容,划分高替代风险区(如CRUD开发)、高增效潜能区(如逻辑优化)和高核心壁垒区(如架构设计),指出AI对不同任务的影响程度。从劳动经济学视角分析行业将呈现K型分化,初级执行者被替代,而精通AI协作的全栈工程师需求增长。文章强调警惕过度依赖AI导致认知能力退化,并提出转型路径:掌握AI驱动开发(AIDD)、深耕领域驱动设计(DDD)、拓展全流程能力及AI原生应用开发。最终结论指出,未来的核心竞争力在于结合AI工具

奶爸的编程之路,也就一周冷个三天 131

微观交通流仿真软件:SUMO (Simulation of Urban MObility)_(1).SUMO入门与基础概念

SUMO(Simulation of Urban MObility)是一个开源的微观交通流仿真软件,用于模拟城市交通系统中的各种动态行为。SUMO不仅可以模拟车辆的行驶,还可以模拟行人、自行车、公交车等交通参与者的运动。通过SUMO,研究人员和工程师可以对交通系统进行详细建模和分析,从而优化交通规划、评估交通政策和设计智能交通系统。车辆路径规划:SUMO可以模拟车辆在路网中的路径选择,包括动态路径选择和静态路径选择。交通信号控制:支持多种交通信号控制策略,包括固定时间控制、自适应控制等。多模式交通:模拟不同

kkchenjj的博客 1181

【Android】使用 Retrofit2 发送异步网络请求的简单案例

为了让你的Android应用程序能够使用互联网进行通信,你需要在文件中添加网络权限声明。这个权限应该添加到 AndroidManifest.xml 文件中的标签内部。下面是一个示例 AndroidManifest.xml 文件的片段,展示了标签的位置:

HEX9CF的技术博客 894

SPI为什么不需要加上拉电阻

大家好,我是记得诚。I2C因为其开漏的结构,无法输出高电平,所以外部加上拉电阻。我们在使用SPI的时候,发现是不需要加上拉电阻的。主要因为SPI多为推挽的结构,推挽电路,高低电平都可以输出,所以外部不需要加上拉电阻。推挽电路可以用2个三极管或者2个MOS管搭建而成。

记得诚 2618

随笔 - 云侧Servlet、端侧Retrofit 实现JSON字符串的下发

云侧Servlet、端侧Retrofit 实现JSON字符串的下发引言一、云侧Servlet的代码实现二、端侧Retrofit代码实现三、测试结果总结 引言 本次博客主要目的是记录学习云侧使用Servlet发送JSON字符串,同时安卓手机端侧使用Retrofit开源软件实现字符串的请求。其中JSON字符串的转化使用了Google的GSON开源软件。 其实呢,最开始只是想学习retrofit + rxjava框架,但是呢,没有云侧对接数据下发,我感觉也不好学,所以呢,干脆就直接搭建服务器,这样下发的数据格式也

baidu_23034447的博客 302

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Android使用Retrofit进行网络请求

Retrofit 简介 用于Android和Java平台的一款类型安全的HTTP客户端,通过一个Java接口实现HTTP请求对象,如下: public interface Github { @GET("/repos/{owner}/{repo}/contributors") Call&lt;List&lt;Contributor&gt;&gt; contributors( ...

当下 5015

WINCC7.3破解文件

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

安卓常用网络请求框架XUtils、OkHttp、Volley、Retrofit(2)

Android学习是一条漫长的道路,我们要学习的东西不仅仅只有表面的 技术,还要深入底层,弄明白下面的 原理,只有这样,我们才能够提高自己的竞争力,在当今这个竞争激烈的世界里立足。人生不可能一帆风顺,有高峰自然有低谷,要相信,那些打不倒我们的,终将使我们更强大,要做自己的摆渡人。资源持续更新中,欢迎大家一起学习和探讨。《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门即可获取![外链图片转存中…(img-RMCtzqaf-1712401373705)]

2401_84123005的博客 1053

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Android 网络请求框架retrofit

Retrofit是现在比较流行的网络请求框架,可以理解为okhttp的加强版,底层封装了Okhttp。准确来说,Retrofit是一个RESTful的http网络请求框架的封装。因为网络请求工作本质上是由okhttp来完成,而Retrofit负责网络请求接口的封装。

特立独行的博客 2040

【Android 进阶】Retrofit2 目前最优雅的网络请求框架

身为Geek的我们,面对不断更新换代的技术是不是有点感到迷茫呢?其实只要掌握正确的学习方法,新的技术也就不畏惧了。 福利来了 推荐一位大牛【人称:面哥】呕心沥血的一篇经验分享: 程序员之路-学习经验总结分享 正是面哥的鞭策,我决定开始看英文的技术文档,学习新技术也是直接看官网的技术文档,本篇文章就是我在Retrofit2的官网看完英文文档Retrofit之后写的翻译版本。希望对英文不是很好的

Veyron_wu 9312

如何用 Retrofit 2 在安卓上实现 HTTP 访问?

最近,笔者对安卓开发的兴趣愈发浓厚,而且不断尝试了许多传闻很棒的开发库 – 大部分也真的很不错。于是打算写一个系列文章,介绍使用这些让人惊叹的库建立安卓示例应用的实践。这样,读者可以自行判断,这些库有多好用。本文是该系列的第一篇。

wangpeng198688的专栏 766

Android Retrofit学习(一):Retrofit的使用

Retrofit是一个RESTful的HTTP网络请求框架的封装,网络请求的工作本质上是okHttp完成,而Retrofit仅负责网络请求接口的封装。 Retrofit的使用步骤 1、添加Retrofit库的依赖 implementation 'com.squareup.retrofit2:retrofit:2.1.0' implementation 'com.squareup.retrofit2...

qq_36955849的博客 403

安卓开发使用Retrofit进行网络编程

它简化了与 RESTful API 进行通信的过程,提供了一种优雅的方式来定义 API 接口、发送网络请求并处理响应。:定义您的 API 接口,其中包含您要访问的端点和请求方法。您可以使用 Retrofit 的注解来定义请求方法、请求参数、请求头等。:在应用程序的某个地方创建 Retrofit 实例,并配置它以便与您的 API 通信。.baseUrl("https://api.example.com/") // 指定基本 URL。:通过调用 API 服务的方法来发送网络请求,并处理响应。

lxl12138的博客 577

Andrioid网络请求—— Retrofit的简单使用

一.概述 1.什么是retrofit        retrofit是现在比较流行的网络请求框架,可以理解为okhttp的加强版,底层封装了Okhttp。准确来说,Retrofit是一个RESTful的http网络请求框架的封装。因为网络请求工作本质上是由okhttp来完成,而Retrofit负责网络请求接口的封装。       本质过程:App应用程序通过Retrofit请求网络,实质上

haazzz的博客 404

Android Retrofit使用实例--get请求

一、引用Retrofit库 我使用的是androidstudio。在app下的build.gradle里添加如下图代码: implementation 'com.squareup.retrofit2:retrofit:2.3.0' implementation 'com.squareup.retrofit2:converter-gson:2.3.0' 二、权限 在AndroidMan...

coderK2014 2967

android retrofit实例,Retrofit使用步骤

[TOC]# 0、简介![Retrofit简介](http://upload-images.jianshu.io/upload_images/944365-b6d3198d37590906.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240 "Retrofit简介")# 1、导入依赖包gradle.xml```implementation ...

weixin_33586594的博客 337

Android中使用Retrofit的五种请求方式案例

目录说明一、环境搭建1.导入依赖2.打开网络权限二、布局三、GET请求1.无参GET请求2.有参GET请求四、POST请求1.无参POST请求2.有参POST请求3.发送Json化POST请求四、代码总结 说明 沿用上一次网络请求接口 接口入口 接口文档 说明 请求方式 请求参数 请求地址 GET 方式,无参数 GET 无 /user/getUser GET方式,Int参数 GET Int(id) /user/getParamUser Post方式,无参数 POST 无 /u

Android_Cob的博客 3333

安卓Retrofit发送单个或多个网络请求(串行)

目标 采用Retrofit,发送单个或多个网络请求(串行),并更新UI. 实现方案 发送单个网络请求方案 修改app工程的build.gradle文件 在android节点下添加如下信息 compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } 添加依赖 implementation 'com.squareup.retrof

蓝不蓝编程 2134
上一篇: Android 监控手机应用使用情况
下一篇: Nginx跨域解决配置示例
_萧_
博客等级 码龄10年 55粉丝 157原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值