如何将Android应用程序连接到节点服务器?

时间:2014-12-12 09:30:37

标签: android node.js

我正在为Android,Node.js和Atmosphere示例尝试使用Fallbacks传输的WebSockets。我收到以下错误:

/home/mofa/NetBeansProjects/App/src/com/jullio/advisor/wAsyncChat.java:87: error: cannot access JsonParseException
                                    return mapper.readValue(data, Message.class);
  class file for org.codehaus.jackson.JsonParseException not found
/home/mofa/NetBeansProjects/App/src/com/jullio/advisor/wAsyncChat.java:68: error: cannot access ObjectCodec
                                return mapper.writeValueAsString(data);
  class file for org.codehaus.jackson.ObjectCodec not found

这是 androidchat代码

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.StrictMode;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import org.atmosphere.wasync.ClientFactory;
import org.atmosphere.wasync.Decoder;
import org.atmosphere.wasync.Encoder;
import org.atmosphere.wasync.Event;
import org.atmosphere.wasync.Function;
import org.atmosphere.wasync.Request;
import org.atmosphere.wasync.RequestBuilder;
import org.atmosphere.wasync.impl.AtmosphereClient;
import org.codehaus.jackson.map.ObjectMapper;

import java.io.IOException;
import java.util.Date;

public class wAsyncChat extends Activity {
    private Button bt;
    private TextView tv;
    private String serverIpAddress = "http://10.0.2.2:8080";
    private final static ObjectMapper mapper = new ObjectMapper();
    private final Handler uiHandler = new Handler();
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
        StrictMode.setThreadPolicy(policy);

        setContentView(R.layout.main);
        bt = (Button) findViewById(R.id.myButton);
        tv = (TextView) findViewById(R.id.myTextView);

        try {
            AtmosphereClient client = ClientFactory.getDefault().newClient(AtmosphereClient.class);

            RequestBuilder request = client.newRequestBuilder()
                    .method(Request.METHOD.GET)
                    .uri(serverIpAddress + "/chat")
                    .trackMessageLength(true)
                    .encoder(new Encoder<Message, String>() {
                        @Override
                        public String encode(Message data) {
                            try {
                                return mapper.writeValueAsString(data);
                            } catch (IOException e) {
                                throw new RuntimeException(e);
                            }
                        }
                    })
                    .decoder(new Decoder<String, Message>() {
                        @Override
                        public Message decode(Event type, String data) {

                            data = data.trim();

                            // Padding
                            if (data.length() == 0) {
                                return null;
                            }

                            if (type.equals(Event.MESSAGE)) {
                                try {
                                    return mapper.readValue(data, Message.class);
                                } catch (IOException e) {
                                    e.printStackTrace();
                                    return null;
                                }
                            } else {
                                return null;
                            }
                        }
                    })
                    .transport(Request.TRANSPORT.WEBSOCKET);

            final org.atmosphere.wasync.Socket socket = client.create();
            socket.on("message", new Function<Message>() {
                @Override
                public void on(final Message t) {
                    uiHandler.post(new Runnable() {
                        @Override
                        public void run() {
                            Date d = new Date(t.getTime());
                            tv.append("Author " + t.getAuthor() + "@ " + d.getHours() + ":" + d.getMinutes() + ": " + t.getMessage() + "\n");
                        }
                    });
                }
            }).on(new Function<Throwable>() {

                @Override
                public void on(Throwable t) {
                    tv.setText("ERROR 3: " + t.getMessage());
                    t.printStackTrace();
                }

        }).open(request.build());

            bt.setOnClickListener(new OnClickListener() {

                String name = null;

                public void onClick(View v) {
                    try {
                        EditText et = (EditText) findViewById(R.id.EditText01);
                        String str = et.getText().toString();
                        if (name == null) {
                            name = str;
                        }
                        socket.fire(new Message(name, str));
                        et.setText("");
                        Log.d("Client", "Client sent message");
                    } catch (Throwable e) {
                        tv.setText("ERROR 3: " + e.getMessage());
                        e.printStackTrace();
                    }
                }
            });

        } catch (Throwable e) {
            tv.setText("Unable to connect: " + e.getMessage());

            e.printStackTrace();
        }
    }
}

1 个答案:

答案 0 :(得分:0)

我有用于nodeserver连接的库。您可以使用它from git

  SocketIO socketio = new SocketIO() {
        @Override
        public void onConnect() {

        }

        @Override
        public void onDisconnect() {

        }

        @Override
        public void onMessage(String message) {
             Log.d("===Server Answer====",message);
        }
};

socketio.Connect("192.168.0.1", 9000);
onConnect()后发送消息:

socketio.send("Your message to socket");

它适用于最新的socketIO,并使用RFC 6455 websocket协议