【问题标题】:Retrofit2 onResponse changes does not persistRetrofit2 onResponse 更改不会持续存在
【发布时间】:2021-05-08 22:04:44
【问题描述】:

我有这个代码

public User getUser(final Context context, final Account user) {
        Call<List<User>> callUsers = request.getUsers(authKey, "json");
        callUsers.enqueue(new Callback<List<User>>() {

            @Override
            public void onResponse(Call<List<User>> call, Response<List<User>> response) {
                if (!response.isSuccessful()) {
                    Toast.makeText(context, String.valueOf(response.message()), Toast.LENGTH_LONG).show();
                    return;
                }

                List<User> users = response.body();

                for (User acc : users) {
                    if (acc.getUsername().equals(user.getUser())
                            || acc.getEmail().equals(user.getUser())) {
                        match = acc;
//                        String s = match.getId() + " " + match.getUsername() + " " + match.getEmail();
//                        Toast.makeText(context, s, Toast.LENGTH_LONG).show();
// Here the match contains the acc data
                    }
                }
            }

            @Override
            public void onFailure(Call<List<User>> call, Throwable t) {
                Toast.makeText(context, t.toString(), Toast.LENGTH_LONG).show();
            }
        });

        String s = match.getId() + " " + match.getUsername() + " " + match.getEmail();
        Toast.makeText(context, s, Toast.LENGTH_LONG).show();
// Here match does not contain that data anymore...
        return match;
    }

所以我想使用 retrofit2 从 REST API 接收一些信息,如果我找到相关数据,我想将其存储在一个名为 match 的变量中。它在 onResponse 方法的主体中运行良好,但是当我尝试在 getUser 方法结束时返回它时,它不再包含数据。我怎样才能使这些数据持久化?

【问题讨论】:

    标签: java android retrofit2


    【解决方案1】:

    enqueue 在单独的线程中异步运行其中的代码。您的程序在通过改造启动入队请求并到达函数末尾后继续执行。稍后,api 响应会返回数据并在提供的回调中运行代码,并在回调主体的末尾终止。

    因此,首先程序运行并将您的 api 请求排入队列,但一直持续到 return 语句而不向您的变量添加任何内容,然后 api 响应返回数据,该数据填充回调内的变量。您必须等待 api 返回并为您的变量分配一个值,因为它使用回调。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-13
      • 2017-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多