如何在 OnResponse 函数之外使用 Retrofit 响应?

2024-04-14

我想获取改造响应列表并在 OnResponse 函数之外使用它,但是当我尝试这样做时,我总是得到一个空对象。 这是我的源代码

ApiInterface apiService = ApiClient.getClient().create(ApiInterface.class);

    Call<ActivitiesResponse> call = apiService.getUserActivities(id);
    call.enqueue(new Callback<ActivitiesResponse>() {
        // If success
        @Override
        public void onResponse(Call<ActivitiesResponse>call, Response<ActivitiesResponse> response) {

             list = response.body().getActivities();// I'm getting a not null response 

        }
        // If failed
        @Override
        public void onFailure(Call<ActivitiesResponse>call, Throwable t) {
            // Log error here since request failed
            Log.e(TAG, t.toString());

        }
    });

    //When I try to use the list here I'm getting a null object

请求是异步的,因此当您尝试返回值时,请求可能尚未完成,因此您无法在请求之外使用它。如果您想从请求返回值,请使用回调接口。

将代码更改为方法并传递回调参数

Example

public void doRequest(final ApiCallback callback) {
    ApiInterface apiService = ApiClient.getClient().create(ApiInterface.class);

    Call<ActivitiesResponse> call = apiService.getUserActivities(id);
    call.enqueue(new Callback<ActivitiesResponse>() {
        // If success
        @Override
        public void onResponse(Call<ActivitiesResponse>call, Response<ActivitiesResponse> response) {

             list = response.body().getActivities();
             callback.onSuccess(list); // pass the list
        }
        // If failed
        @Override
        public void onFailure(Call<ActivitiesResponse>call, Throwable t) {
            // Log error here since request failed
            Log.e(TAG, t.toString());
        }
    });
}

public interface ApiCallback{
    void onSuccess(ArrayList<YOURTYPE> result);
}

onResume() 中的示例用法,基本上您可以在任何您想要的地方执行此操作:

public void onResume(){
    super.onResume();
    doRequest(new ApiCallback(){
         @Override
         public void onSuccess(ArrayList<YOURTYPE> result){
             //do stuff here with the list from the request
         }
    });
}

让我知道这是否符合您的需求

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 OnResponse 函数之外使用 Retrofit 响应? 的相关文章

随机推荐

  • 如果“target”属性与某个字符串通过 jQuery 匹配,则获取该属性的值

    假设我有一些链接 a href target self a a href target self a a href target self a 如何获取以 UniqueString 开头的目标属性的值 元素的ID未知 我们需要通过 targ
  • 显示软键盘时向上移动布局?

    我在RelativeView中有一些元素设置了对齐底部属性 当软键盘出现时 这些元素被软键盘隐藏 我希望它们向上移动 以便如果有足够的屏幕空间 它们会显示在键盘上方 或者使键盘上方的部分可滚动 以便用户仍然可以看到元素 关于如何解决这个问题
  • .NET MAUI 每天运行几次的循环后台作业

    我希望后台工作每天运行 2 3 次 但更少也没关系 这只是对我的服务器的快速 api 调用 不需要更新 UI 事实上我更喜欢它在应用程序不在前台时运行 但这是另一个主题 我读过最新版本的 Android 和 iOS 甚至制造商限制了该应用程
  • 是否可以用 phongeap 目录中的其他数据库文件替换现有的 sqlite 数据库文件

    我有一个要求用其他数据库文件替换设备数据库 就像备份和存储目录 下载 备份 应用程序名称 或服务器一样 如果我们删除数据或丢失手机 那么我已经从服务器恢复数据并替换为设备数据库文件 我正在尝试使用代码 但仅替换数据库我没有得到 functi
  • scrollsToTop 不适用于 UIViewController 包含

    使用SDK 6 1 Xcode 4 6 1 我制作了一个新项目Master Detail iOS App ARC 没有故事板 然后在DetailViewController 在里面viewDidLoad我添加两个UITableView包含在
  • 我应该选择哪个 graphql-spring-boot-starter ?

    我正在考虑将 GraphQL 功能添加到我的 Spring Boot 应用程序中 我发现有两个工件可以做到这一点 One is com graphql java kickstart graphql spring boot starter另一
  • 用 Espresso 单击 EditText 的可绘制右侧

    如何才能单击 EditText 右侧可绘制对象 检查屏幕截图 我尝试了多种方法 但总是陷入困境 public static Matcher
  • 在开始动画之前修改 iPhone 动画容器视图

    我正在向我正在开发的纸牌游戏添加一些基本动画 我的第一个 iPhone 应用程序 我正在创建一个自定义 UIView 类 AnimationContainer 它从 image1 翻转到 image2 同时从 rect1 移动到 rect2
  • 阅读 Whatsapp 消息

    我想创建一个 Android 应用程序来读取收件箱以及 Whatsapp 消息 我想做一个备份之类的东西 尽管可以在 Whatsapp 中选择这样做 但我想阅读这些消息 然后从我的应用程序中备份它们 我了解到 Whatsapp 在文件系统中
  • Symfony2表单类型实体添加额外选项

    我有以下 Symfony 表单字段 它是从实体加载的下拉列表 gt add measureunit entity array label gt Measure Unit class gt TeamERPBaseBundle MeasureU
  • Python正则表达式替换

    嘿 我正在尝试找出一个正则表达式来执行以下操作 这是我的字符串 Place 08 09 2010 15 531 2 909 650 我需要用逗号分隔该字符串 尽管由于数字数据字段中使用了逗号 但分割无法正常工作 所以我想在运行分割字符串之前
  • 处理和解决“网络使用过多(后台)”的正确方法

    问题背景 当前 我们面临 网络使用过多 背景 来自 Android Vital 报告 最后30天是0 04 但我们只是好于 9 过去 30 天 0 04 基准 优于 9 由于仅好于9 看起来像是一件可怕的事情 我们决定认真研究这个问题 该应
  • 如何在 x86_64 上准确地衡量未对齐访问速度?

    In 一个答案 https stackoverflow com questions 45116212 are packed structs portable 45116730 45116730 我已经说过 在很长一段时间内 未对齐访问的速度
  • 如何始终返回index.html Tomcat

    我有一个在 Tomcat 上运行的 Angular 应用程序 但由于我已经实现了路由 如果我手动访问一个 url 我会得到一个404未找到 另外 当发生错误时 它是一个基本的服务器页面 而不是我的错误 url 页面 如何配置 Tomcat
  • 引用表达式早期部分的匹配项的正则表达式

    我正在寻找一个正则表达式 它将标识一个序列 其中文本中的整数指定表达式末尾的尾随字母数 该具体示例适用于识别堆积格式的遗传数据中的插入和删除 例如 如果我正在搜索的文本是 AtT 3ACGTTT 1AaTTa 我需要匹配插入和删除 在本例中
  • 如何在客户端启动桌面应用程序

    在我的网页中 我必须在客户端计算机上启动桌面应用程序 如果已安装 知道我该怎么做吗 如果应用程序是 MS Office 或 Adob e Reader 我知道如何启动它们 但我要启动的应用程序是自定义应用程序 您无法在互联网上找到它 我如何
  • 如何使注册的符号不显示下划线?

    我遇到了问题 无法显示带有下划线的单词的一部分和没有下划线的单词的一部分 我希望 已注册 符号没有下划线 HTML h3 Basecamp span class sup reg span h3 CSS h3 font size 21px c
  • Rails:如果变量存在,则为输入字段设置一个值

    当 id 传递到控制器中的新操作时 我尝试为两个文本字段输入设置一个值 当前的代码可以工作 但我想知道是否可以缩短代码 当前代码 View div class custom input div
  • GStreamer 上的“列入黑名单”是什么意思?

    我正在尝试交叉编译 GStreamer 版本是1 2 3 主机PC的操作系统是x86 linux 目标系统的操作系统是MIPSEL linux操作系统 我成功为目标设备编译了 gstreamer 和插件 和gst launch 1 0可以被
  • 如何在 OnResponse 函数之外使用 Retrofit 响应?

    我想获取改造响应列表并在 OnResponse 函数之外使用它 但是当我尝试这样做时 我总是得到一个空对象 这是我的源代码 ApiInterface apiService ApiClient getClient create ApiInte