Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/454.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在Android中,如何通过socket.io发送带有参数的POST/GET或通过socket.io调用FeatherJS服务?_Javascript_Java_Android_Node.js_Feathersjs - Fatal编程技术网

Javascript 在Android中,如何通过socket.io发送带有参数的POST/GET或通过socket.io调用FeatherJS服务?

Javascript 在Android中,如何通过socket.io发送带有参数的POST/GET或通过socket.io调用FeatherJS服务?,javascript,java,android,node.js,feathersjs,Javascript,Java,Android,Node.js,Feathersjs,我刚刚使用NodeJs完成了我的应用程序。现在我在android上编写了一个应用程序,通过节点端与我的服务进行通信。如何通过android socket与查找/获取/创建/更新等节点服务进行通信 下面是我的代码片段: try { mSocket = IO.socket("http://10.0.130.32:3030"); } catch (URISyntaxException e) { e.printStackTrace(); } mSocket.on(Socket.EVEN

我刚刚使用NodeJs完成了我的应用程序。现在我在android上编写了一个应用程序,通过节点端与我的服务进行通信。如何通过android socket与查找/获取/创建/更新等节点服务进行通信

下面是我的代码片段:

try {
    mSocket = IO.socket("http://10.0.130.32:3030");
} catch (URISyntaxException e) {
    e.printStackTrace();
}

mSocket.on(Socket.EVENT_CONNECT, new Emitter.Listener() {

    @Override
    public void call(Object... args) {
       // socket.emit("foo", "hi");
       // socket.disconnect();
    }

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

    /*
     * Android joins to a room after receiving socket's id from another user
     */

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

        try {
            JSONObject object = new JSONObject(args[0].toString());
            mSocket.emit("join", object.get("socket"));
            id = object.getString("socket");
        } catch (JSONException e) {
            e.printStackTrace();
        }

    }

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

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

});
mSocket.connect();
我知道你可以使用:mSocket.emitjoin,一些数据;但我想调用一个RESTAPI,例如:在Android中,通过带参数的套接字调用RESTAPI


我该怎么做呢?

在Android中,对于REST Api调用,我们使用HttpURLConnection。 例如,GET:

String url = "http://10.0.130.32:3030/getID";
URL obj = new URL(url);
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");

通过Feather,您可以从REST或套接字访问所有服务方法find/get/create/etc

从文档中:

调用服务方法

可以通过发出带有方法参数的::事件来调用服务方法。servicepath是服务已在app.use中注册的名称,不带前导或尾随斜杠。functionerror、data Node约定之后的可选回调将被调用,并带有方法调用的结果或可能发生的任何错误

params将在服务方法调用中设置为params.query。其他服务参数可以通过Socket.io中间件设置

您可以在该页面上找到许多示例,但作为一个想法:

socket.emit('messages::find', { status: 'read', user: 10 }, (error, data) => {
  console.log('Found all messages', data);
});

请注意,您需要指向feathers应用程序根目录的套接字:10.0.130.32:3030

,但使用HttpURLConnection建立是一个新的连接/请求。如果我使用插座,我想使用它。是否可以只使用套接字进行所有通信?我需要一个针对android的解决方案,而不是Javascript。@SeaDog这不是Javascript与android的真正问题。这似乎是一个如何使用Socket.io与Feather的RESTAPI对话的问题。要转换您的呼叫mSocket.emitjoin,请输入一些数据;要使用RESTAPI,您需要按照mSocket.emitgetID::find,some data;其中getID是您的Feathers服务,find是您要使用的服务上的方法。好的,我将尝试您的解决方案。谢谢你的回复。