Android 客户端未获取数据,但 .net 客户端从 SignalR 服务器获取数据
Android Client doesn't get data but .net client getting data from SignalR server
对于这么长的问题深表歉意!
我是 SignalR 的新手。请帮我解决我的问题。
我在 Web 中有 SignalR 服务器,我从 .net 客户端站点获取数据,但无法从我的 Android 客户端获取数据。当我的调试器到达 "hub.invoke" 时就停止了。
我用不同的代码很累,但没有成功。
如果我无法执行上述操作,那么我想在我家的本地服务器上执行此操作。我有两台笔记本电脑,一台是 运行 Win7,另一台是 Win8。我想在其中一个服务器中保留一个 signalR 服务器,并从另一个服务器进行访问。我怎样才能做到这一点?我会写什么样的 SignalR 服务器 API?如果你们请帮我一步?
下面是我绑定的代码
String android_id = Settings.Secure.getString(arg0.getContext().getContentResolver(), Settings.Secure.ANDROID_ID);
HubConnection con = new HubConnection(Uri.parse("http://10.198.40.32:8090/login/").toString());
HubProxy hub = con.createHubProxy("NotificationHub");
con.start();
try {
hub.invoke( "userID", "password", android_id).get();
} catch (InterruptedException e) {
// Handle ...
System.out.print(e);
} catch (ExecutionException e) {
// Handle ...
System.out.print(e);
}
您可以参考我的工作示例代码如下。然后,您可以将 Object.class 替换为您自己的自定义 class:
public <T> void startSignalR(String transport, String serverUrl, final String userName, final Class<T> tClass) {
Platform.loadPlatformComponent(new AndroidPlatformComponent());
Credentials credentials = new Credentials() {
@Override
public void prepareRequest(Request request) {
request.addHeader(HEADER_KEY_USERNAME, userName);
}
};
mConnection = new HubConnection(serverUrl);
mConnection.setCredentials(credentials);
mHub = mConnection.createHubProxy(SERVER_HUB_CHAT);
if (transport.equals("ServerSentEvents")) {
mTransport = new ServerSentEventsTransport(mConnection.getLogger());
} else if (transport.equals("LongPolling")) {
mTransport = new LongPollingTransport(mConnection.getLogger());
}
mAwaitConnection = mConnection.start(mTransport);
try {
mAwaitConnection.get();
} catch (InterruptedException e) {
e.printStackTrace();
return;
} catch (ExecutionException e) {
e.printStackTrace();
return;
}
mHub.on("broadcastMessage",
new SubscriptionHandler1<Object>() {
@Override
public void run(final Object msg) {
final String finalMsg;
Gson gson = new Gson();
Object object = gson.fromJson(msg.toString(), tClass);
Field[] fields = object.getClass().getDeclaredFields();
for (int i = 0; i < fields.length; i++) {
try {
System.out.println("Value = " + fields[i].get(object));
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
, Object.class);
...
}
用于 Android/Java 的 SignalR 的完整源代码,您可以找到 here at GitHub
希望对您有所帮助!
对于这么长的问题深表歉意! 我是 SignalR 的新手。请帮我解决我的问题。 我在 Web 中有 SignalR 服务器,我从 .net 客户端站点获取数据,但无法从我的 Android 客户端获取数据。当我的调试器到达 "hub.invoke" 时就停止了。 我用不同的代码很累,但没有成功。
如果我无法执行上述操作,那么我想在我家的本地服务器上执行此操作。我有两台笔记本电脑,一台是 运行 Win7,另一台是 Win8。我想在其中一个服务器中保留一个 signalR 服务器,并从另一个服务器进行访问。我怎样才能做到这一点?我会写什么样的 SignalR 服务器 API?如果你们请帮我一步?
下面是我绑定的代码
String android_id = Settings.Secure.getString(arg0.getContext().getContentResolver(), Settings.Secure.ANDROID_ID);
HubConnection con = new HubConnection(Uri.parse("http://10.198.40.32:8090/login/").toString());
HubProxy hub = con.createHubProxy("NotificationHub");
con.start();
try {
hub.invoke( "userID", "password", android_id).get();
} catch (InterruptedException e) {
// Handle ...
System.out.print(e);
} catch (ExecutionException e) {
// Handle ...
System.out.print(e);
}
您可以参考我的工作示例代码如下。然后,您可以将 Object.class 替换为您自己的自定义 class:
public <T> void startSignalR(String transport, String serverUrl, final String userName, final Class<T> tClass) {
Platform.loadPlatformComponent(new AndroidPlatformComponent());
Credentials credentials = new Credentials() {
@Override
public void prepareRequest(Request request) {
request.addHeader(HEADER_KEY_USERNAME, userName);
}
};
mConnection = new HubConnection(serverUrl);
mConnection.setCredentials(credentials);
mHub = mConnection.createHubProxy(SERVER_HUB_CHAT);
if (transport.equals("ServerSentEvents")) {
mTransport = new ServerSentEventsTransport(mConnection.getLogger());
} else if (transport.equals("LongPolling")) {
mTransport = new LongPollingTransport(mConnection.getLogger());
}
mAwaitConnection = mConnection.start(mTransport);
try {
mAwaitConnection.get();
} catch (InterruptedException e) {
e.printStackTrace();
return;
} catch (ExecutionException e) {
e.printStackTrace();
return;
}
mHub.on("broadcastMessage",
new SubscriptionHandler1<Object>() {
@Override
public void run(final Object msg) {
final String finalMsg;
Gson gson = new Gson();
Object object = gson.fromJson(msg.toString(), tClass);
Field[] fields = object.getClass().getDeclaredFields();
for (int i = 0; i < fields.length; i++) {
try {
System.out.println("Value = " + fields[i].get(object));
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
, Object.class);
...
}
用于 Android/Java 的 SignalR 的完整源代码,您可以找到 here at GitHub
希望对您有所帮助!