【问题标题】:Signal R Native Android app Negotiation FailedSignal R Native Android 应用协商失败
【发布时间】:2015-08-09 06:43:10
【问题描述】:

我正在尝试创建一个可以连接到我的基本 SignalR Hub 的 Android 应用。

它只是一个基本的 Hub 文件,我想用它来进行测试,但到目前为止我还没有运气。有人可以看看我做错了什么吗?每次我尝试运行它时,我都会得到以下堆栈竞赛:

05-27 09:10:39.785  22247-22247/nl.vict.chatapp I/art﹕ Rejecting re-init on previously-failed class java.lang.Class<microsoft.aspnet.signalr.client.transport.WebsocketTransport$1>
05-27 09:10:39.785  22247-22247/nl.vict.chatapp I/art﹕ Rejecting re-init on previously-failed class java.lang.Class<microsoft.aspnet.signalr.client.transport.WebsocketTransport$1>
05-27 09:10:39.829  22247-22266/nl.vict.chatapp I/art﹕ Rejecting re-init on previously-failed class java.lang.Class<microsoft.aspnet.signalr.client.transport.WebsocketTransport$1>
05-27 09:10:39.830  22247-22247/nl.vict.chatapp W/System.err﹕ java.util.concurrent.ExecutionException: microsoft.aspnet.signalr.client.transport.NegotiationException: There was a problem in the negotiation with the server
05-27 09:10:39.830  22247-22247/nl.vict.chatapp W/System.err﹕ at microsoft.aspnet.signalr.client.SignalRFuture.get(SignalRFuture.java:112)
05-27 09:10:39.830  22247-22247/nl.vict.chatapp W/System.err﹕ at microsoft.aspnet.signalr.client.SignalRFuture.get(SignalRFuture.java:102)
05-27 09:10:39.830  22247-22247/nl.vict.chatapp W/System.err﹕ at nl.vict.chatapp.MainActivity.onCreate(MainActivity.java:48)
05-27 09:10:39.831  22247-22247/nl.vict.chatapp W/System.err﹕ at android.app.Activity.performCreate(Activity.java:5937)
05-27 09:10:39.831  22247-22247/nl.vict.chatapp W/System.err﹕ at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
05-27 09:10:39.832  22247-22247/nl.vict.chatapp W/System.err﹕ at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251)
05-27 09:10:39.832  22247-22247/nl.vict.chatapp W/System.err﹕ at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
05-27 09:10:39.832  22247-22247/nl.vict.chatapp W/System.err﹕ at android.app.ActivityThread.access$800(ActivityThread.java:144)
05-27 09:10:39.833  22247-22247/nl.vict.chatapp W/System.err﹕ at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
05-27 09:10:39.833  22247-22247/nl.vict.chatapp W/System.err﹕ at android.os.Handler.dispatchMessage(Handler.java:102)
05-27 09:10:39.833  22247-22247/nl.vict.chatapp W/System.err﹕ at android.os.Looper.loop(Looper.java:135)
05-27 09:10:39.833  22247-22247/nl.vict.chatapp W/System.err﹕ at android.app.ActivityThread.main(ActivityThread.java:5221)
05-27 09:10:39.834  22247-22247/nl.vict.chatapp W/System.err﹕ at java.lang.reflect.Method.invoke(Native Method)
05-27 09:10:39.834  22247-22247/nl.vict.chatapp W/System.err﹕ at java.lang.reflect.Method.invoke(Method.java:372)
05-27 09:10:39.855  22247-22247/nl.vict.chatapp W/System.err﹕ at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
05-27 09:10:39.855  22247-22247/nl.vict.chatapp W/System.err﹕ at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
05-27 09:10:39.855  22247-22247/nl.vict.chatapp W/System.err﹕ Caused by: microsoft.aspnet.signalr.client.transport.NegotiationException: There was a problem in the negotiation with the server
05-27 09:10:39.855  22247-22247/nl.vict.chatapp W/System.err﹕ at microsoft.aspnet.signalr.client.transport.HttpClientTransport$1.onResponse(HttpClientTransport.java:86)
05-27 09:10:39.855  22247-22247/nl.vict.chatapp W/System.err﹕ at microsoft.aspnet.signalr.client.http.java.NetworkRunnable.run(NetworkRunnable.java:82)
05-27 09:10:39.855  22247-22247/nl.vict.chatapp W/System.err﹕ at java.lang.Thread.run(Thread.java:818)
05-27 09:10:39.855  22247-22247/nl.vict.chatapp W/System.err﹕ Caused by: java.lang.NoClassDefFoundError: microsoft.aspnet.signalr.client.transport.WebsocketTransport$1
05-27 09:10:39.855  22247-22247/nl.vict.chatapp W/System.err﹕ at microsoft.aspnet.signalr.client.transport.WebsocketTransport.start(WebsocketTransport.java:92)
05-27 09:10:39.855  22247-22247/nl.vict.chatapp W/System.err﹕ at microsoft.aspnet.signalr.client.transport.AutomaticTransport.resolveTransport(AutomaticTransport.java:89)
05-27 09:10:39.855  22247-22247/nl.vict.chatapp W/System.err﹕ at microsoft.aspnet.signalr.client.transport.AutomaticTransport.start(AutomaticTransport.java:143)
05-27 09:10:39.855  22247-22247/nl.vict.chatapp W/System.err﹕ at microsoft.aspnet.signalr.client.Connection.startTransport(Connection.java:673)
05-27 09:10:39.855  22247-22247/nl.vict.chatapp W/System.err﹕ at microsoft.aspnet.signalr.client.Connection.access$500(Connection.java:30)
05-27 09:10:39.855  22247-22247/nl.vict.chatapp W/System.err﹕ at microsoft.aspnet.signalr.client.Connection$3.run(Connection.java:373)
05-27 09:10:39.855  22247-22247/nl.vict.chatapp W/System.err﹕ at microsoft.aspnet.signalr.client.Connection$3.run(Connection.java:350)
05-27 09:10:39.855  22247-22247/nl.vict.chatapp W/System.err﹕ at microsoft.aspnet.signalr.client.SignalRFuture.setResult(SignalRFuture.java:73)
05-27 09:10:39.856  22247-22247/nl.vict.chatapp W/System.err﹕ at microsoft.aspnet.signalr.client.transport.HttpClientTransport$1.onResponse(HttpClientTransport.java:82)
05-27 09:10:39.856  22247-22247/nl.vict.chatapp W/System.err﹕ ... 2 more

这是我的代码:

枢纽:

public class ChatHub : Hub
    {
        public void Send(string name, string message)
        {
            Clients.All.addNewMessageToPage(name, message);
        }
    }

主活动(Android Studio)

ListView listView;
    HubConnection connection;
    HubProxy proxy;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        listView = (ListView)findViewById(R.id.listView);

        String[] values = new String[]{
                "Testvalue1",
                "Testvalue2",
                "Testvalue3"
        };

        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1,android.R.id.text1,values);

        listView.setAdapter(adapter);

        connection = new HubConnection("http://www.voffice.nl/chat");
        proxy = connection.createHubProxy("chatHub");
        SignalRFuture<Void> awaitConnection = connection.start();
        try{
            awaitConnection.get();
        }catch (InterruptedException e){
            e.printStackTrace();
        }catch (ExecutionException e){
            e.printStackTrace();
        }



    }

提前致谢,

凯文

--

编辑:

我已检查服务器和 websockets 是否已启用。

【问题讨论】:

标签: java c# android asp.net-mvc signalr


【解决方案1】:

经过几天的努力,这是我如何让它工作的:

  1. 下载 https://github.com/TooTallNate/Java-WebSocket 并构建它。

  2. 下载https://github.com/SignalR/java-client

  3. 将 libs 文件夹添加到 signalr-client-sdk 并放入 java_websocket.jar 你之前构建的
  4. 在 signalr-client-sdk/build.gradle 中替换

    compile 'org.java-websocket:java-websocket:1.3.1'

    与:

    compile files('libs/java_websocket.jar')

  5. 到这里找到 http:// 到 ws:// url https://github.com/SignalR/java-client/issues/63 的修复,在代码中更改它

  6. 构建 signalr 客户端并将其包含在您的项目中,您还必须包含您在第一步中构建的 java_websocket.jar,因此您的 gradle 文件将如下所示:

    compile 'client.signalr.aspnet.microsoft.signalr_client_sdk_android:signalr-client-sdk-android-release:1.0.0@aar' compile files('libs/signalr-client-sdk.jar') compile files('libs/java_websocket.jar')

不要将任何查询字符串传递给 HubConnection,否则它会挂起!!

如果您需要传递标头(如授权令牌),您必须修复更多代码,对此有拉取请求:https://github.com/SignalR/java-client/pull/64

【讨论】:

  • 您能解释一下为什么用 TooTallNate 的实现替换 websockets 实现吗?你能否说一下你是否在 android 中实现了可接受的(即生产就绪的)稳定实现?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-14
  • 2018-09-22
  • 2017-02-12
  • 2017-07-13
  • 2011-05-27
相关资源
最近更新 更多