【问题标题】:How to build Android test code for socket.io-client.java如何为 socket.io-client.java 构建 Android 测试代码
【发布时间】:2014-10-03 06:08:41
【问题描述】:

此问题与How to build a Maven Android project in eclipse 有关。使用来自@user714965 的建议,我能够在项目中构建代码:https://github.com/nkzawa/socket.io-client.java。现在我正在尝试编译一个 Android 测试项目。我创建了一个新的 Android 项目,并在 Java Build Path 下将 socket.io-client 项目指定为依赖项。但我收到编译错误。 Eclipse 找不到发射器类。 这是相关代码:

public class SocketTask extends AsyncTask<Void, Void, Void> {

    Socket mSocket = null;
    @Override
    protected Void doInBackground(Void... arg0) {
        try {
            Log.d(TAG, "Connecting to server");
            mSocket = IO.socket("<my tested socket.io server address>");
        } catch (URISyntaxException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        mSocket.on(Socket.EVENT_CONNECT, new Emitter.Listener() {

            @Override
            public void call(Object... args) {

                Log.d(TAG, "Connected");
            }

        }).on("event", new Emitter.Listener() {

            @Override
            public void call(Object... args) {
                Log.d(TAG, "Event");
            }

        }).on(Socket.EVENT_DISCONNECT, new Emitter.Listener() {

            @Override
            public void call(Object... args) {
                Log.d(TAG, "Disconnect");
            }

        });

        mSocket.connect();
        return null;
    }
}

【问题讨论】:

  • 套接字是否必须在 AsyncTask 中?

标签: android eclipse maven socket.io


【解决方案1】:

看起来依赖库没有解析。你都正确安装了吗?

  • engine.io-client 0.3.0
  • Java-WebSocket 1.3.0
  • org.json 20090211(Android默认安装)

Emitter 包含在 engine.io-client 中。

【讨论】:

  • 我看到 engine.io-client 0.3.0 和 Java-WebSocket 1.3.0 在 socket.io-client 项目中作为“引用库”存在。我已将 socket.io-client 项目列为依赖项。这还不够吗?或者我应该将这些库直接复制到我的项目中吗?可能我在这里遗漏了一些基本的东西..
  • @everydayapps 抱歉,我不熟悉 Eclipse(IntelliJ IDEA 用户)。
  • 没问题。我可以尝试 IntelliJ 来测试这段代码。您是否使用 IntelliJ 在 Android 上成功构建和测试?
  • 其实不然,我会创建一个演示应用。
  • @nkzawa 嗨,您是否创建了演示应用程序?
【解决方案2】:

我无法回复 cmets(新 StackOverflow 用户),但我已通过 build.gradle 让该库在 Android Studio 中工作。如果您主要为 Android 开发,他们建议您迁移到 Android Studio,因为它很快就会成为 supported IDE

编辑

我可以使用 nkzawa 的这个库从一个 Android 应用程序连接到基于 nodejs 构建的 socketIO 服务器。参考repository

将库添加为 gradle 依赖项:

compile 'com.github.nkzawa:socket.io-client:0.3.0'

我写了一个类来保存我的套接字:

public class SocketIO{

  Socket sock = null;

  public SocketIO(){
    try{
       sock = IO.socket('<connection string>');

       //Place all events here as per documention
       sock.on(Socket.EVENT_CONNECT, new Emitter.Listener(){
         @Override
         public void call(Object... args){
           System.out.println("connect");
         }
       });

    sock.connect();
    } catch(URISyntaxException e){
      e.printStatckTrace();
    }
  };

  //Helper function for emiting from android
  public void sEmit(String event, JSONObject obj){
    if(socket.connected()){
      sock.emit(event, obj);
    }
  }
}

并在我的活动中使用它:

SocketIO socket = new SocketIO();

我在让库正常工作时遇到了一些麻烦,但它一直完美无缺,github 存储库的“问题”部分非常有帮助。

希望对您有所帮助。

【讨论】:

  • 您能否为我们工作室新手发布详细说明?我从来没有设法让任何东西在 Studio 中工作。
  • 我使用的是 Android Studio Beta 0.8.14。我不确定从哪里开始让 Android Studio 工作,我的项目在导入后都进行了一些调整(文件 -> 导入项目)。要让这个库工作,你打开 app 文件夹中的 build.gradle 文件并添加这一行:compile 'com.github.nkzawa:socket.io-client:0.3.0' under dependencies。该工作室将编译代码并使其在您的项目中可用。
  • 好的。我会试一试。只是确认一下 - 您是否能够与 Socket.io 服务器连接并交换消息?
猜你喜欢
  • 2014-02-14
  • 2023-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-07
  • 1970-01-01
  • 1970-01-01
  • 2015-10-08
相关资源
最近更新 更多