在 GWT 异步回调中,如何在 onSuccess 中处理相同的返回类型?

Posted

技术标签:

【中文标题】在 GWT 异步回调中,如何在 onSuccess 中处理相同的返回类型?【英文标题】:In a GWT asynchronous callback, how can I handle the same return types in onSuccess? 【发布时间】:2018-04-17 11:35:30 【问题描述】:

如果我在服务中有两个 boolean 方法,我如何确保 onSuccess 方法处理返回 boolean 的正确方法?

例如,在onSuccess 方法中我说:

if (result instanceof Boolean) ;

有没有一种方法可以区分返回布尔值的服务方法?否则无法保证在我的 onSuccess 方法中执行正确的代码,就好像结果是 boolean,如果调用了我的两个 boolean 服务方法中的任何一个,它就会执行。

这是我面临的问题的一个例子:

private class DefaultCallback implements AsyncCallback
        
        @Override
        public void onFailure(Throwable caught)
            
            mainGUI.getServerResponseLabel().setStyleName("serverResponseLabelError");
            mainGUI.getServerResponseLabel().sethtml("An error occurred while "
                    + "attempting to contact the server. Please check your network " + "connection and try again.");
            

        @Override
        public void onSuccess(Object result)
            
            if (result instanceof Boolean)
                 
                //
                I have two methods that return a boolean here, 
                so this block will execute no matter which one is called;
                for one method I want to display a GUI windows saying "Upload complete",          
                and for another, create an excel spreadsheet. But the boolean value of one method won't be relevant to the other

【问题讨论】:

你能提供和例子吗?我不明白的是你怎么能忽略你正在调用的两种方法中的哪一种...... 在 AsyncCallBack.onSuccess 方法中,只要异步回调成功,它就会调用结果 - 但该结果没有任何关于哪个服务方法发送它的信息,至于我知道。 使用 RPC,你给方法一个 asyncCallback 参数,这个特定的调用将在成功或失败时被调用。那怎么会错呢? 好的。将尝试提供一个示例。 提供的例子,希望我真的有道理! 【参考方案1】:

有很多灰色区域,但请耐心等待: 在SomethingRPCService.java中

boolean isA();
boolean isB();

在SomethingRPCServiceAsync.java中

void isA(AsyncCallback<Boolean> callback);
void isB(AsyncCallback<Boolean> callback);

在你的活动中

somethingService.isA(new AsyncCallback<Boolean>() 
        @Override
        public void onSuccessImpl(final Boolean response) 
            //will be executed on success of THIS call
        
        @Override
        public void onFailure(final Throwable caught) 
            // not relevant here
        
);

somethingService.isB(new AsyncCallback<Boolean>() 
        @Override
        public void onSuccessImpl(final Boolean response) 
            //will be executed on success of THIS call
        
        @Override
        public void onFailure(final Throwable caught) 
            // not relevant here
        
);

您可以(必须?)实际输入您的回报

编辑:用你的例子,我看得好一点;你的回调不应该是一样的,你应该覆盖它所以代码是不一样的,因为它不是

【讨论】:

太棒了。我遵循了一个 YT 教程,展示了一种构建 GWT 应用程序的特定方法,但我从未想过要这样处理它。我将创建一个实现 AsyncCallback 的自定义类,并在每个方法的参数中实例化该类,而不是您的方式。谢谢!!! 我的荣幸^^。不要犹豫,在您的自定义类中定义您的onFailure 方法,因此您只需覆盖onSuccess(当然,如果适用!) 例如this.serviceMethodA.getInputFile(new DefaultCallback()); 在异步接口中你有两次isA。第二个应该是isB。只是一个错字,但是.... ;) +1 now ;) 作为对您答案的补充,很高兴了解method signature。 @E.Rowlands,例如阅读 this。

以上是关于在 GWT 异步回调中,如何在 onSuccess 中处理相同的返回类型?的主要内容,如果未能解决你的问题,请参考以下文章

GWT 单线程异步回调

GWT RPC 回调未在 onModuleLoad 中执行

Android:异步回调

Ext-GWT TreeGrid 间接调用了 GWT-RPC 回调?为啥?

Twitter Composer 回调 OnSuccess/OnFailure Fabric

Android-异步任务-AsyncTask