Android Retrofit:onNext 其他类需要的值

开发商

我正在使用带有 Rx java 的 Retrofit 并且我在 onNext 中获取身份验证令牌的值。根据 onNext 的结果,我必须通过在自定义标头中添加令牌来将数据发布到服务器。我是否应该在 on next 中编写所有代码,是否可以从 onNext 返回一个值,以便何时值可用?

public String getToken() {
    Retrofit retrofit = new Retrofit.Builder()
                        .baseUrl("https://abc.efg.com/")
                        .addConverterFactory(ScalarsConverterFactory.create())
                        .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
                        .build();
                GetTokenInterface service = retrofit.create(GetTokenInterface.class);

                Observable<String> response_call = service.getToken1(setAPI_KEY, setaccesstoken);

                response_call.subscribeOn(Schedulers.newThread())
                        .observeOn(AndroidSchedulers.mainThread())
                        .subscribe(new Subscriber<String>() {
                            @Override
                            public void onCompleted() {

                                System.out.print("Complete");
                            }

                            @Override
                            public void onError(Throwable e) {

                                System.out.print("Fail");
                            }

                            @Override
                            public void onNext(String token) {
                                authentication_token = token; //getting correct value here
                            }
                        });
                return authentication_token;
    }

}

然后在另一个班级:

generated_token = getToken();

但我得到了 generate_token null 因为值不可用 有没有办法在其中获取值?我必须使用这个值来发布或者我需要在 onNext() 中结合 post observable 吗?

cyroxis

RxJava 代码是异步执行的。例如

public class Foo {

    String value = "a";

    public String getFoo() {
        value = "a"; // This executes first
        Observable.just(value + "a")
                .observeOn(Schedulers.io())
                .subscribe(new Action1<String>() {
                    public void call(String v) {
                        value = v; // This is called later on IO thread.
                    }
                }); // This creates the observable and schedules execution on IO thread.
        return value; // Return value "a"
    }
}

Foo foo = new Foo();
foo.getFoo(); // Return a
Thread.sleep(100);
foo.getFoo(); // likley Return `aa` (depends upon how long the IO thread take to run)
Thread.sleep(100);
foo,getFoo(); // likley Return `aaa` (depends upon how long the IO thread take to run)

如果你想从你的方法 getToken 中获取一个值,你可以返回,Observable<String>如果你想你也可以将令牌保存在你的类中,如下所示。

public class TokenService {

    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl("https://abc.efg.com/")
            .addConverterFactory(ScalarsConverterFactory.create())
            .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
            .build();
    GetTokenInterface service = retrofit.create(GetTokenInterface.class); // This should be done outside of the method for performance

    String savedToken;

    public Observable<String> refreshToken() {
        return service.getToken1(setAPI_KEY, setaccesstoken)
                .subscribeOn(Schedulers.newThread())
                .doOnNext(new Action1<String() {
                    public void call(String token) {
                        savedToken = token;
                    }
                }) // Do want is needed with token
                .observeOn(AndroidSchedulers.mainThread());
    }

    public String getSavedToken() {
        return savedToken;
    }

}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Android从其他类设置TextView

来自分类Dev

Android HttpPost.setEntity() equivalent in retrofit

来自分类Dev

建立要求时,Android Retrofit错误

来自分类Dev

Android Retrofit:缺少方法主体或声明抽象

来自分类Dev

Android Retrofit API链接提示

来自分类Dev

Android Retrofit-如何覆盖baseUrl

来自分类Dev

Android-Retrofit 2-Authenticator Result

来自分类Dev

是否有可能在rxjava android的订户的onNext()中获得2个值?

来自分类Dev

Android Retrofit 2.0刷新令牌

来自分类Dev

更新到Retrofit 2.0后,PublishSubject的onNext调用在不同的线程中

来自分类Dev

Android Retrofit日志不显示

来自分类Dev

Android Retrofit POST请求缓存

来自分类Dev

Android Retrofit入队方法未返回值

来自分类Dev

从Android中的其他类调用主类方法

来自分类Dev

Android Realm Retrofit关系错误

来自分类Dev

需要Android Retrofit错误HTTP方法注释(例如@ GET,@ POST等)

来自分类Dev

ORMLite Android类字段是其他类的ID

来自分类Dev

retrofit2返回可观察到的,每个onNext都有1个对象

来自分类Dev

使用主类Android Java中其他类的函数

来自分类Dev

Android Retrofit解析

来自分类Dev

在不同的线程中调用onNext(RxJava Android)

来自分类Dev

匿名类不是抽象的,不会覆盖(Android + Retrofit)

来自分类Dev

如何将Retrofit onResponse方法返回的Json数据发送到其他类?

来自分类Dev

Android Retrofit POST API 调用替换字符串值

来自分类Dev

Android Retrofit - 如何从 JSON 数组中分离类

来自分类Dev

Android Studio Recyclerview 使用 Retrofit

来自分类Dev

Android - Retrofit 不显示数据

来自分类Dev

即使在处置了 CompositeDisposable onDestroy 之后,也会调用 RxJava2 Android onNext

来自分类Dev

是否可以在 Android Studio Retrofit2 中将更多类添加到响应类中?

Related 相关文章

  1. 1

    Android从其他类设置TextView

  2. 2

    Android HttpPost.setEntity() equivalent in retrofit

  3. 3

    建立要求时,Android Retrofit错误

  4. 4

    Android Retrofit:缺少方法主体或声明抽象

  5. 5

    Android Retrofit API链接提示

  6. 6

    Android Retrofit-如何覆盖baseUrl

  7. 7

    Android-Retrofit 2-Authenticator Result

  8. 8

    是否有可能在rxjava android的订户的onNext()中获得2个值?

  9. 9

    Android Retrofit 2.0刷新令牌

  10. 10

    更新到Retrofit 2.0后,PublishSubject的onNext调用在不同的线程中

  11. 11

    Android Retrofit日志不显示

  12. 12

    Android Retrofit POST请求缓存

  13. 13

    Android Retrofit入队方法未返回值

  14. 14

    从Android中的其他类调用主类方法

  15. 15

    Android Realm Retrofit关系错误

  16. 16

    需要Android Retrofit错误HTTP方法注释(例如@ GET,@ POST等)

  17. 17

    ORMLite Android类字段是其他类的ID

  18. 18

    retrofit2返回可观察到的,每个onNext都有1个对象

  19. 19

    使用主类Android Java中其他类的函数

  20. 20

    Android Retrofit解析

  21. 21

    在不同的线程中调用onNext(RxJava Android)

  22. 22

    匿名类不是抽象的,不会覆盖(Android + Retrofit)

  23. 23

    如何将Retrofit onResponse方法返回的Json数据发送到其他类?

  24. 24

    Android Retrofit POST API 调用替换字符串值

  25. 25

    Android Retrofit - 如何从 JSON 数组中分离类

  26. 26

    Android Studio Recyclerview 使用 Retrofit

  27. 27

    Android - Retrofit 不显示数据

  28. 28

    即使在处置了 CompositeDisposable onDestroy 之后,也会调用 RxJava2 Android onNext

  29. 29

    是否可以在 Android Studio Retrofit2 中将更多类添加到响应类中?

热门标签

归档