在 void 异步方法之外获取字符串的值?

Posted

技术标签:

【中文标题】在 void 异步方法之外获取字符串的值?【英文标题】:get value of string outside void async method? 【发布时间】:2020-10-17 08:28:06 【问题描述】:

如何在 getInformation 方法之外获取 String r 的值?具体来说,我想将 String stringpwd 设置为 String r。 (getInformation 是一个 void 方法)

编辑:我忘了说,我只想在成功完成后设置值stringpwd。

                String user = emailaddress.getText().toString().trim();
                String pwd = password.getText().toString().trim();
                db.getInformation("password", user, new DatabaseHelper.MyCallback() 
                    @Override
                    public void success(String r) 
                        // Use result

                    

                    @Override
                    public void failure(Throwable t) 
                        // Display error

                    

                );

            

               String stringpwd = r;

【问题讨论】:

这段代码是什么语言的?请先标记那些。 它在java中。我会标记的。 这将有助于获得正确的关注。作为注释,void 之类的标签确实毫无意义,应该避免使用。人们不会寻找这类问题。 【参考方案1】:

您可以定义一个全局变量(下面使用的示例:userCpy),并将字符串 r 的值初始化或存储在该变量中,使其在其他地方可用。

                String userCpy = null;         
                int flag = 0;    
                String user = emailaddress.getText().toString().trim();
                String pwd = password.getText().toString().trim();
                db.getInformation("password", user, new DatabaseHelper.MyCallback() 
                    @Override
                    public void success(String r) 
                        // Use result
                       userCpy = r;
                       flag = 1;
                    

                    @Override
                    public void failure(Throwable t) 
                        // Display error

                    

                );

               if(flag==1)
                   String stringpwd = userCpy;

【讨论】:

对不起,我忘了说,我只想在成功完成后设置值stringpwd。 @AnonymousCardinal 好吧,只需将String userCpy = ""; 更改为String userCpy = nullstringpwd 将在失败时为空。 getInformation 是异步的,所以我不想在成功返回 userCpy 之前设置 stringpwd。 我添加了一个 int 变量标志,以确保 stringpwd = userCpy(即 stringpwd = r)仅在执行成功块时发生。 正如@pirho 提到的,在您的情况下,最好将初始值 null 分配给 userCpy 而不是 ""。

以上是关于在 void 异步方法之外获取字符串的值?的主要内容,如果未能解决你的问题,请参考以下文章

IOS Swift我如何从异步方法中获得价值[重复]

如何获取AsyncTask 异步处理的返回值

nodejs fetch中异步函数之外的存储数组

如何在 ngZone 之外运行异步功能? [复制]

如何在 Android Studio 中以除 onCreate 之外的其他方法获取应用程序的上下文?

js中获取标签里面的值除了document.getEelementById()和document.getEelementsByName()之外还有那些方法?