Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/196.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android SignalR java客户端:未在连接上接收所有SignalR消息_Java_Android_Signalr_Java Client - Fatal编程技术网

Android SignalR java客户端:未在连接上接收所有SignalR消息

Android SignalR java客户端:未在连接上接收所有SignalR消息,java,android,signalr,java-client,Java,Android,Signalr,Java Client,在尝试了几个选项后,我无法在我的Android应用程序上接收所有信号器消息。在我看来,这似乎与长途运输有关,但我找不到解决办法。。。我收到所有longPolling消息,但有时它会进入处理程序,有时它会尝试在不输入处理程序方法的情况下再次连接到服务器 我试着按照上面的例子来做 代码非常简单: public void startNewSignalR(){ Platform.loadPlatformComponent(new AndroidPlatformComponent());

在尝试了几个选项后,我无法在我的Android应用程序上接收所有信号器消息。在我看来,这似乎与长途运输有关,但我找不到解决办法。。。我收到所有longPolling消息,但有时它会进入处理程序,有时它会尝试在不输入处理程序方法的情况下再次连接到服务器

我试着按照上面的例子来做

代码非常简单:

public void startNewSignalR(){

    Platform.loadPlatformComponent(new AndroidPlatformComponent());

    // Create a new console logger
    Logger logger = new Logger() {
        @Override
        public void log(String message, LogLevel level) {
            System.out.println(message);
        }
    };

    Uri signalRSource = Uri.parse(serverUrl);
    HubConnection connection = new HubConnection(signalRSource.toString(), "", true, logger);
    eventHub = connection.createHubProxy("eventHub");

    connection.error(new ErrorCallback() {

        @Override
        public void onError(Throwable error) {
            System.err.println("There was an error communicating with the server.");
            System.err.println("Error detail: " + error.toString());

            error.printStackTrace(System.err);
        }
    });

    // Subscribe to the connected event
    connection.connected(new Runnable() {

        @Override
        public void run() {
            System.out.println("CONNECTED");
        }
    });

    // Subscribe to the closed event
    connection.closed(new Runnable() {

        @Override
        public void run() {
            System.out.println("DISCONNECTED");
        }
    });

    eventHub.subscribe(new Object() {
        @SuppressWarnings("unused")
        public void receivePendingCountUpdate(String A) {
            System.out.println("------------------------>>>>> Count: " + A);
        }
    });

    // Start the connection
    connection.start(new LongPollingTransport(logger))
            .done(new Action<Void>() {

                @Override
                public void run(Void obj) throws Exception {
                    System.out.println("Done Connecting!");
                    eventHub.invoke("JoinGroup", "signalevents-" + userId + "-pendingcount");
                }
            });
}

我是SignalR android客户端的专家,我将向您展示实现这一点的最佳方法:

步骤1: 像这样配置集线器连接

private HubConnection _connection;
private HubProxy _hub;

String host = "http://www.thisisawebsite.net"; //The url from your web site
            _connection = new HubConnection( host );
            _hub = _connection.createHubProxy( "NameHub" ); //The name from your hub class in your server
步骤2:

使用专用方法或类似方法进行连接:

 private  SignalRFuture<Void> _awaitConnection;

     private void startConnection(){
             _awaitConnection = _connection.start(new LongPollingTransport(_connection.getLogger()));
//you can do here a while loop for reintents or something ( this is a good practices, at least 3 tries.
                try {         
                    _awaitConnection.get(2000,TimeUnit.MILLISECONDS);  
                    escucharGrupos();
                    isConnected = true;   
                    break;
                } catch (InterruptedException e) {
                         System.out.println("Disconnect . . .");
                } catch (ExecutionException e) {
                         System.out.println("Error . . .");
                }catch(Exception e){}
        } 
专用信号未来连接;
私有void startConnection(){
_awaitConnection=\u connection.start(新的LongPollingTransport(\u connection.getLogger());
//你可以在这里做一个while循环来增强或者其他什么(这是一个很好的实践,至少尝试了3次)。
试试{
_获取(2000,时间单位为毫秒);
蜗牛;
断开连接=正确;
打破
}捕捉(中断异常e){
System.out.println(“断开…”);
}捕获(执行例外){
System.out.println(“错误…”);
}捕获(例外e){}
} 
如果这里的所有内容都是正确的,您可以打印类似System.out.println(“连接完成”)的内容,这意味着您的客户机和服务器之间的持久性连接已经完成并且很好

步骤3:配置处理程序:

我通常通过一种方法来实现这一点:

private SubscriptionHandler1 handlerCon;
private void starHandlersConnection(){
 handlerCon = new SubscriptionHandler1<String>() {
            @Override
            public void run(String p1) {
              //Here is where we get back the response from the server. Do stuffs
            }
        };

 _hub.on("NameOfFunctionOfYourHub",handlerCon,String.class);
}
私有订阅handler1 handlerCon;
私有void starHandlersConnection(){
handlerCon=新订阅Handler1(){
@凌驾
公共无效运行(字符串p1){
//这里是我们从服务器返回响应的地方
}
};
_on(“hub的函数名”,handlerCon,String.class);
}
遵循所有这些步骤,这应该可以很好地工作


作为提示,在服务类中建立连接中心。您可以通过这种方式进行whatsapp或电报之类的聊天。

我是SignalR android客户端的专家,我将向您展示最好的方法:

步骤1: 像这样配置集线器连接

private HubConnection _connection;
private HubProxy _hub;

String host = "http://www.thisisawebsite.net"; //The url from your web site
            _connection = new HubConnection( host );
            _hub = _connection.createHubProxy( "NameHub" ); //The name from your hub class in your server
步骤2:

使用专用方法或类似方法进行连接:

 private  SignalRFuture<Void> _awaitConnection;

     private void startConnection(){
             _awaitConnection = _connection.start(new LongPollingTransport(_connection.getLogger()));
//you can do here a while loop for reintents or something ( this is a good practices, at least 3 tries.
                try {         
                    _awaitConnection.get(2000,TimeUnit.MILLISECONDS);  
                    escucharGrupos();
                    isConnected = true;   
                    break;
                } catch (InterruptedException e) {
                         System.out.println("Disconnect . . .");
                } catch (ExecutionException e) {
                         System.out.println("Error . . .");
                }catch(Exception e){}
        } 
专用信号未来连接;
私有void startConnection(){
_awaitConnection=\u connection.start(新的LongPollingTransport(\u connection.getLogger());
//你可以在这里做一个while循环来增强或者其他什么(这是一个很好的实践,至少尝试了3次)。
试试{
_获取(2000,时间单位为毫秒);
蜗牛;
断开连接=正确;
打破
}捕捉(中断异常e){
System.out.println(“断开…”);
}捕获(执行例外){
System.out.println(“错误…”);
}捕获(例外e){}
} 
如果这里的所有内容都是正确的,您可以打印类似System.out.println(“连接完成”)的内容,这意味着您的客户机和服务器之间的持久性连接已经完成并且很好

步骤3:配置处理程序:

我通常通过一种方法来实现这一点:

private SubscriptionHandler1 handlerCon;
private void starHandlersConnection(){
 handlerCon = new SubscriptionHandler1<String>() {
            @Override
            public void run(String p1) {
              //Here is where we get back the response from the server. Do stuffs
            }
        };

 _hub.on("NameOfFunctionOfYourHub",handlerCon,String.class);
}
私有订阅handler1 handlerCon;
私有void starHandlersConnection(){
handlerCon=新订阅Handler1(){
@凌驾
公共无效运行(字符串p1){
//这里是我们从服务器返回响应的地方
}
};
_on(“hub的函数名”,handlerCon,String.class);
}
遵循所有这些步骤,这应该可以很好地工作


另外,作为一个提示,在服务类中建立连接中心。你可以用这种方式进行whatsapp或telegram之类的聊天。

请帮忙:我在应用程序中使用了信号r。但它随机跳过了一些消息。可能有什么问题。@AbelMorgan mHubProxy.on(客户端方法\u最新消息,新订阅句柄3()这工作正常,在服务器响应时调用,但我已在internet丢失时重新连接signlr连接,但mHubProxy.invoke方法是调用并将方法发送到服务器,但响应未出现,且未调用mHubProxy.on方法。请帮助我解决此问题。当您执行重新连接操作时,必须实例化hubConnection和hub代理对象再次出现,因为您的“旧”对象不再有效,基本上您必须重复第一步过程。请记住再次订阅您的listeners@AbelMorgan请看屏幕截图,我已经建立了HUB连接并订阅了监听器。你能帮我一下吗:我在我的应用程序中使用了信号r。但是它随机跳过了一些消息。什么可能是问题所在。@AbelMorgan mHubProxy.on(客户端\方法\最新消息,新订阅句柄3()这工作正常,在服务器响应时调用,但我已在internet丢失时重新连接signlr连接,但mHubProxy.invoke方法是调用并将方法发送到服务器,但响应未出现,且未调用mHubProxy.on方法。请帮助我解决此问题。当您执行重新连接操作时,必须实例化再次使用hubConnection和hub代理对象因为您的“旧”对象不再有效,基本上您必须重复第一步过程。请记住再次订阅您的listeners@AbelMorgan请看屏幕截图,我已经安装了hubConnection,还订阅了Listener查看此查看此