Android OkHttp + Retrofit 取消请求的方法

当用户在请求完成前离开界面时,为了优化体验需要取消网络请求。在OkHttp中,可以通过调用Call的cancel方法来实现。然而,Retrofit没有直接提供取消请求的接口。本文介绍了如何通过为请求添加自定义header,并在OkHttpClient拦截器中检查页面状态,实现在Activity销毁时取消对应的网络请求。具体步骤包括创建请求时添加标记,根据标记找到请求,最后取消请求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

在某一个界面,用戶發起了一個網絡請求,由於某種緣由用戶在網絡請求完成前離開了當前界面,比較好的作法是取消這個網絡請求。對於OkHttp來講,具體是調用Call的cancel方法。

如何找到這一個網絡請求並取消掉它呢?

操做大體分爲3步。第一步,在創建請求時,給請求(request)添加標記;第二步,根據標記,找到請求;最後,取消這個請求。

OkHttp中的tag

要取消一個請求,OkHttp中能夠使用cancel方法

OkHttp的request對象有tag。能夠根據tag來標示請求。

//Set tags for your requests when you build them:
    Request request = new Request.Builder().
    url(url).tag("requestKey").build();

    //When you want to cancel:
    //A) go through the queued calls and cancel if the tag matches:
    for (Call call : mHttpClient.dispatcher().queuedCalls()) {
   
        if (call.request().tag().equals("requestKey"))
            call.cancel();
    }

    //B) go through the running calls and cancel if the tag matches:
    for (Call call 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值