Java 如何返回变量";a「;在下面的函数中

Java 如何返回变量";a「;在下面的函数中,java,android,Java,Android,这是一个简化的函数 它一直返回0,而我希望它返回5。为什么 public int accessKey() { a = 0; mSubscription = mAccountManager.getLoginPassword() .flatMap(loginPassword -> mServerAPI .getProfilesList((new BaseRequest( loginPassword.getLogin()

这是一个简化的函数

它一直返回
0
,而我希望它返回5。为什么

public int accessKey() {

    a = 0;

    mSubscription = mAccountManager.getLoginPassword()
            .flatMap(loginPassword -> mServerAPI
    .getProfilesList((new BaseRequest(
            loginPassword.getLogin(),
            loginPassword.getPassword(),
            ClientGetter.getClientFromManager(),
            CodeSnippets.getSha256(ClientGetter.getClientFromManager()))
            )))
            .doOnNext(profilesListe -> mProfilesList = profilesListe.getItems())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribeOn(Schedulers.io())
            .subscribe(new Subscriber<BaseResponse>() {
                @Override
                public void onCompleted() {
                    a =5;

                   }
                      
    return a; }
public int accessKey(){
a=0;
mSubscription=mAccountManager.getLoginPassword()
.flatMap(loginPassword->mServerAPI
.getProfilesList((新的BaseRequest(
loginPassword.getLogin(),
loginPassword.getPassword(),
ClientGetter.getClientFromManager(),
getSha256(ClientGetter.getClientFromManager())
)))
.doOnNext(profilesListe->mProfilesList=profilesListe.getItems())
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
.subscribe(新订户(){
@凌驾
未完成的公共无效(){
a=5;
}
返回一个;}

这是因为异步或非阻塞行为,通常在API调用从数据库获取一些数据的场景中,我们会异步处理这些行为,因为否则您的应用程序会被卡住。这篇文章将帮助您解决此问题。

这是因为异步us或非阻塞行为,通常在API调用从数据库获取某些数据的场景中,我们会异步处理这些行为,因为否则您的应用程序将被卡住。此帖子将帮助您解决此问题。

您在此处执行异步操作。您的代码不会执行“自顶向下”操作在这里,但将在另一个线程上执行-Rxjava将整个操作转移到另一个线程,然后将结果返回到指定的线程,但这不会立即发生。当您的订阅代码执行时(我们不知道何时执行),您的return语句已经执行

您可以尝试将代码更改为以下内容(作为一个想法,我没有任何类似于您的代码来创建工作示例):

这意味着您的方法现在将返回一个可观察的,然后您可以订阅并订阅这些更改

这意味着您的方法的签名必须更改以支持这个新的返回类型,并且调用方法必须订阅这个可观察的


您将问题描述为一个简化的函数,但我将给您一个更简单(完整)的示例:

公共可观测foo(){
可观察到的回报。仅(5);
}
公共用途(){
一次性使用=foo().subscribeOn(某物).observeOn(某物).subscribe(
//在这个订阅中,就像你通常做的那样,你会发现5的结果
)
...
//一次性手柄
}

您正在这里执行一个异步操作。您的代码在这里不执行“自上而下”,而是将在另一个线程上执行-Rxjava将整个操作转移到另一个线程,然后将结果返回到指定的线程,但这不会立即发生。当您的订阅代码执行时(我们不知道什么时候)您的返回语句已经执行

您可以尝试将代码更改为以下内容(作为一个想法,我没有任何类似于您的代码来创建工作示例):

这意味着您的方法现在将返回一个可观察的,然后您可以订阅并订阅这些更改

这意味着您的方法的签名必须更改以支持这个新的返回类型,并且调用方法必须订阅这个可观察的


您将问题描述为一个简化的函数,但我将给您一个更简单(完整)的示例:

公共可观测foo(){
可观察到的回报。仅(5);
}
公共用途(){
一次性使用=foo().subscribeOn(某物).observeOn(某物).subscribe(
//在这个订阅中,就像你通常做的那样,你会发现5的结果
)
...
//一次性手柄
}

我使用了回调接口方法,它成功了!非常感谢我使用了回调接口方法,它成功了!非常感谢将帮助您理解它返回为0的原因。虽然您的代码与示例的格式不完全相同,但它仍然是异步的,不同步的。我的答案对您有帮助吗?您有什么建议吗其他问题?将帮助您理解它返回为0的原因。虽然您的代码与示例的格式不完全相同,但它仍然是异步的,不同步的。我的回答是否有帮助?您还有其他问题吗?
 return mAccountManager.getLoginPassword()
        .flatMap(loginPassword -> mServerAPI
.getProfilesList((new BaseRequest(
        loginPassword.getLogin(),
        loginPassword.getPassword(),
        ClientGetter.getClientFromManager(),
        CodeSnippets.getSha256(ClientGetter.getClientFromManager()))
        )))
        .doOnNext(profilesListe -> mProfilesList = profilesListe.getItems())
        .observeOn(AndroidSchedulers.mainThread())
        .subscribeOn(Schedulers.io())
public Observable<Integer> foo() {

    return Observable.just(5);

}

public void usage(){

  Disposable disposable = foo().subscribeOn(something).observeOn(something).subscribe(
   //inside this subscribe, like you'd normally do, you'd find the result of 5
  )
 ...
 //handle disposable
}