当前位置: 首页 > 知识库问答 >
问题:

要求对目标排放进行另一次改造

封飞
2023-03-14

我有以下课程:

public class SessionStore {
    Subject<Session, Session> subject;

    public SessionStore() {
       subject = new SerializedSubject<>(BehaviorSubject.create(new Session());
    }

    public void set(Session session) {
        subject.onNext(session);
    }

    public Observable<UserSession> observe() {
        return subject.distinctUntilChanged();
    }
}

在活动中,我观察会话并对每个更改执行网络操作:

private Subscription init() {
    return sessionStore
            .observe()
            .flatMap(new Func1<Session, Observable<Object>>() {
                @Override
                public Observable<Object> call(Session session) {
                    return (session.isValid() 
                       ? retrofitService.getThingForValid()
                       : retrofitService.getThingForInalid())
                       .subscribeOn(Schedulers.io());
                }
            })
            .subscribe(...);
}

现在我有一个Okhttp请求拦截器,当网络响应不是200代码时,我将会话实例从有效设置为无效。

事情是这样的:

    < li >在初始订阅会话存储时,执行< code>getThingForValid()并失败。 < li>OkHttp截获失败并设置新的会话。 < li >会话存储发出一个新的现在无效的会话。 < li >新发射执行< code > getThingForInvalid()方法。

重要的是要知道,这个执行发生在前一个改造调用的中间。这是因为OkHttp客户端是由retrieve包装的,所有拦截器都是在retrievehtml" target="_blank">返回之前执行的。

考虑到这一点,您意识到第二个调用已经被reform执行和处理了,而第一个调用还没有完成。

我试图忽略流中的此异常,但无论如何,第二个调用都被Retrofit取消了。

你有任何想法如何使我的概念工作吗?

共有1个答案

戚阳文
2023-03-14

如果您在令牌过期的情况下获得响应代码401:您需要将身份验证器添加到OkHttpClient.Builder

builder.authenticator(new Authenticator() {
            @Override
            public Request authenticate(Route route, Response response) throws IOException {
                final LoginResponse newLoginResponse = refreshTokenClient.refreshToken();
                //save new token locally, if needed
                return response
                        .request()
                        .newBuilder()
                        .removeHeader("Api-Auth-Token") // removing old header
                        .addHeader("Api-Auth-Token", newLoginResponse.getAuthToken())
                        .build();
            }
        });

哪里

public interface RefreshTokenService {

   @PUT("/api/v1/tokens")
   LoginResponse refreshToken();

 }

但请注意:当响应代码为401时,此验证器

 类似资料:
  • 问题内容: 我有一个JTable,其属性AutoCreateRowSorter设置为true。单击时效果很好,但如果单击时仅将鼠标移动1px,则不会出现排序,这在某些情况下不舒服。如何解决这个问题? UPD我只想在释放鼠标时显示排序。 问题答案: 肮脏的方法(请阅读: 如果您不是绝对地绝望,请确切地知道自己在做什么!请不要这样做 ),方法是挂接到uiDelegate安装的MouseListener

  • 我的目标是通过拖放对tableview进行排序。我举了一个例子:http://docs.oracle.com/javafx/2/fxml_get_started/fxml_tutorial_intermediate.htm 对于拖放,我通过Scene Builder添加了fxml 制造了控制器 但是在drag Drop,我无法得到我扔下物体的那排位置。我得到的只是手机信息<代码>文本[Text=“

  • 我想用内核机对数据集进行分类。目标类有5个不同的值,我想一次性编码它。之后,我有5个目标列。我做了5次训练,每次目标列一次。现在我想分类一个新的样本。我用我得到的5个Trainig模型对样品进行了5次分类。最后,我看哪一个预测在5个预测中具有最大值,然后我根据具有最大预测的类对样本进行分类。我不确定我做的是对的。我怎样才能以正确的方式做到这一点?

  • 因此,我试图学习如何为类项目排序数组。我想知道如何对一个数组进行排序,从而对另一个数组进行排序。在下面的代码中,我可以对年份数组进行排序,但我如何才能使更改这一数组将名称和艺术家数组都更改为它们排列的数组呢?此外,如果你有任何建议,让代码对眼睛不那么苛刻,请告诉我,我正在努力掌握这个概念。

  • 我对Gradle是全新的,但在我的Build.Gradle中尝试了以下功能:

  • 问题内容: 我在Python中有两个列表 我想对第一个列表进行排序,并使用结果对第二个列表进行排序。 换句话说,结果应为: 我知道如何分别对每个列表进行排序,但是如何使用对另一个列表进行排序所产生的索引排列来对一个列表进行排列呢? 问题答案: 施瓦兹变换