我正在使用nkzawa套接字库在我的应用中实现聊天功能。我已使用套接字和端点(url字符串)向服务器发送消息。
我听说过关于RxJava和RxAndroid是观察数据流的最佳方式。
Observable.from(MyEndPoint).subscribe()
但我无法将url参数传递给observable。
是否可以创建一个observable来监听我的服务器端点上的新消息和现有消息。请问您如何以这种方式或其他方式检索套接字消息,谢谢。
按照建议编辑:
这是我在没有Rx但没有工作的情况下尝试过的代码片段:
private com.github.nkzawa.socketio.client.Socket mSocket;
{
try {
mSocket = IO.socket(Constants.PUBLIC_CHAT_ENDPOINT);
} catch (URISyntaxException e) {
e.printStackTrace();
}
}
套接字如上所述初始化并连接到这里:
mSocket.connect();
我正在尝试在库文档中进行演示,但不能正常工作。
mSocket.on(Constants.SOCKET_GET_MESSAGE_EVENT, new Emitter.Listener() {
@Override
public void call(final Object... args) {
runOnUiThread(new Runnable() {
@Override
public void run() {
try {
JSONObject jsonObject = (JSONObject) args[0];
JSONObject dataObject = jsonObject.getJSONObject("data");
String type = dataObject.getString("type");
Log.d(TAG, "Message is of type:\t" + type);
JSONObject contentObject = dataObject.getJSONObject("content");
String roomId = contentObject.getString("roomid");
String userId = contentObject.getString("userId");
String message = contentObject.getString("message");
Log.d(TAG, "Get Message is:\t" + message);
Log.d(TAG, "roomId:\t" + roomId);
Log.d(TAG, "Get userId is:\t" + userId);
TingTingUser otherUsers = new TingTingUser(userId, "Abhiram Labhani", "Unknown");
HomeMessage othersHomeMessages = new HomeMessage(message, otherUsers, System.currentTimeMillis());
List<HomeMessage> othersList = new ArrayList<>();
othersList.add(othersHomeMessages);
Log.d(TAG, "Other Messages size is:\t " + othersList.size());
} catch (JSONException e) {
e.printStackTrace();
}
}
});
}
});
我想使用RxJava实现上述代码,但不知道如何从动态的,不断更新的端点观察数据,因为大多数文档和文章仅使用预定义的数据。感谢。