首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android -使用socket io从服务器接收消息

Android -使用socket io从服务器接收消息
EN

Stack Overflow用户
提问于 2013-10-29 22:05:05
回答 1查看 2.6K关注 0票数 1

我正在使用Gottox的Socket.IO-Java-Client开发一个android应用程序(AndroidAsync也是由koush开发的)。连接到套接字或通过套接字发送消息没有问题,但我没有收到来自套接字的消息或响应。

该活动从通过API接收消息列表开始,然后打开一个套接字发送和接收传出/传入消息。如果我重新启动活动,任何新消息都会出现,但这是通过API实现的--我需要在活动仍处于打开状态时从套接字接收它们。

下面是与套接字相关的代码:

代码语言:javascript
复制
public final void openSocket() {
    try {
        socket = new SocketIO(SERVER_URL);
        socket.connect(this);
        join();
    } catch (MalformedURLException e) {
        e.printStackTrace();
    }
}

public void join() {
    try {
        JSONObject json = new JSONObject();
        json.putOpt("join", mChat.getID());
        socket.emit("join", this, json);
        // socket.emit("join", json);
    } catch (Exception ex) {
        ex.printStackTrace();
    }
}

public void sendMessage() {
    try {
        System.out.println("Send: " + content.getTextWithEmojis());
        JSONObject json = new JSONObject();
        json = prepareJSONObject(json);
        // socket.emit("send", this, json);
        socket.emit("send", json);
        content.setText("");
        addChat(json);
    } catch (JSONException ex) {
        ex.printStackTrace();
    }
}

public void addChat(JSONObject jObject) {
    ChatPost post;
    try {
        post = parseJSONObject(jObject);
        mChatMessages.add(Arrays.asList(new ChatPost[] {post}));
    } catch (JSONException e) {
        e.printStackTrace();
    }
}

@Override
public void onMessage(JSONObject json, IOAcknowledge ack) {
    try {
        Log.i(TAG, "Server said:" + json.toString());

        if(json.has("args")) {
            JSONArray jArray = json.getJSONArray("args");
            JSONObject jObject = jArray.getJSONObject(0);

            ChatPost post;
            post = parseJSONObject(jObject);
            mChatMessages.add(Arrays.asList(new ChatPost[] {post}));
        }
    } catch (JSONException e) {
        e.printStackTrace();
    }
}

@Override
public void onMessage(String data, IOAcknowledge ack) {
    Log.i(TAG, "Server said: " + data);
}

@Override
public void onError(SocketIOException socketIOException) {
    Log.i(TAG, "an Error occured");
    socketIOException.printStackTrace();
}

@Override
public void onDisconnect() {
    Log.i(TAG, "Connection terminated.");
}

@Override
public void onConnect() {
    Log.i(TAG, "Connection established");
}

@Override
public void on(String event, IOAcknowledge ack, Object... args) {
    Log.i(TAG, "Server triggered event '" + event + "'");
    if (args.length > 0)
        Log.i(TAG, "Args '" + args[0].toString() + "'");
    for (Object arg : args)
        Log.i(TAG, "Args '" + arg.toString() + "'");
}

日志:

代码语言:javascript
复制
I/io.socket(9753): > 5:::{"args":[{"join":"101"}],"name":"join"}
I/io.socket(9753): < 1::
I/io.socket(9753): < 5:::{"name":"ready"}
I/io.socket(9753): < 2::
I/io.socket(9753): < 2::
I/io.socket(9753): > 2::
I/io.socket(9753): > 2::
I/io.socket(9753): > 5:::{"args":[{"content":"test","chat_id":"101","user_id":"5"}],"name":"send"}
I/io.socket(9753): < 2::
I/io.socket(9753): > 2::

我收到的回复是“加入”,而不是“发送”。我是不是遗漏了什么?

编辑:我尝试使用AndroidAsync,但遇到了同样的问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-01 19:10:19

抱歉,原来是后端问题

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19670074

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档