i使用signalr android实现:https://github.com/erizet/signala,我有一些问题可以使用。
我这样初始化了我的哈伯连接:
String url = "http://www.myurl.com";
con = new HubConnection(url, getActivity(), new LongPollingTransport())
{
@Override
public void OnStateChanged(StateBase oldState, StateBase newState) {
switch(newState.getState())
{
case Connected:
ArrayList<String> test = new ArrayList<String>();
test.add("header");
test.add("0");
test.add("data");
test.add("pleyh");
hub.Invoke("SendConnection", test, new HubInvokeCallback() {
@Override
public void OnResult(boolean arg0, String arg1) {
Log.i("HubConnection", "On result: arg0 = " + arg0 + " arg1 = " + arg1);
}
@Override
public void OnError(Exception arg0) {
Log.i("HubConnection", "On error: arg0 = " + arg0.getMessage());
}
});
break;
case Disconnected:
Log.i("HubConnection", "Disconnected");
stopSignalA();
break;
default:
break;
}
}
之后,我初始化了我的Hubproxy并开始连接:
try {
hub = con.CreateHubProxy("GameManager");
} catch (OperationApplicationException e) {
e.printStackTrace();
}
hub.On("addNewMessageToPage", new HubOnDataCallback()
{
@Override
public void OnReceived(JSONArray args) {
Log.i("HubConnection", "OnReceived " + args.toString());
for(int i=0; i<args.length(); i++)
{
Log.i("HubConnection", "OnReceived -> addNewMessageToPage = " + args.opt(i).toString());
}
}
});
con.Start();
似乎一切正常,因为谈判成功了,我收到了一个带有连接的JSON。问题是当我收到Onstatechanged时进行调用时,当我知道自己已连接时,
我收到此错误:
{"I":"0","E":"'SendConnection' method could not be resolved.","T":" at
microsoft.aspnet.signalr.hubs.nullmethoddescriptor.b_ 0(ihub) emptyHub,object [] emptyparameters) r n at microsoft.aspnet.signalr.hubs.hubdispatcher.incoming(ihubincominginvokercontext 上下文) r n ---堆栈跟踪的结束来自上一个位置 抛出了例外--- r n system.runtime.compilerservices.taskawaiter.throwfornonsuccess(任务 任务) r n at system.runtime.compilerservices.taskawaiter.handlenonsuccessanddebuggernotification(任务 任务) r n at microsoft.aspnet.signalr.hubs.hubpipipelinemodule。
这是我发送到服务器的内容:
{"H":"gamemanager","A":["header","0","data","user"],"M":"SendConnection","I":"0"}
错误表明该方法" sendConnection"不存在,但确实存在。有人已经遇到了这个问题吗?还是我的代码有问题?预先感谢!
编辑1:
有关集线器和方法定义的定义:
public class GameManager : Hub
{
[HubMethodName("sendConnection")]
public void SendConnection(string Json)
{
Clients.Client(Context.ConnectionId).addNewMessageToPage("[SendConnection] Connection Established: " + Json);
}
[HubMethodName("sendToRoom")]
public void SendToRoom(string message)
{
Clients.Group(FindRoomFromConnectionId()._room).addNewMessageToPage("[sendToRoom]: " + message);
}
}
您可以粘贴要调用的代码吗?似乎您正在调用的方法名称有问题。还提供集线器方法定义。
我认为您在调用sendConnection时使用的参数太多。尝试将代码更改为这样的东西:
ArrayList<String> test = new ArrayList<String>(1);
test.add("only one argument");