简体   繁体   English

如何使用套接字从节点服务器检索数据?

[英]How to Retrieve Data from Node Server With Socket?

i've got problem getting data from Node server, i've searching many reference from internet, but i haven't found one yet that can solve my problem.我在从 Node 服务器获取数据时遇到了问题,我从互联网上搜索了许多参考资料,但我还没有找到可以解决我的问题的参考资料。 this is my node server这是我的节点服务器

var socket  = require('socket.io');
var express = require('express');
var app     = express();
/*
var options = {
    key: fs.readFileSync('cert/file.key'),
    cert: fs.readFileSync('cert/file.crt')
};
var server  = require('https').createServer(options, app);
*/
var server  = require('http').createServer(app);
var io      = socket.listen( server );
var port    = process.env.PORT || 3000;

//server.listen(port, '103.126.57.4', function () {
server.listen(port, function () {
    console.log('Server listening at port %d', port);
    //console.log('Server listening at port %d', port, server.address());
});


io.on('connection', function (socket) {

console.log( "New client connected !" );
//console.log(socket.handshake.headers.host);

socket.on( 'new_message', function( data ) {
    io.sockets.emit( 'new_message', {
        idleveluser: data.idleveluser,
        nama: data.nama,
        level: data.level,
        idchat: data.idchat,
        pesan: data.pesan,
        file: data.file,
        reply: data.reply,
        created_at: data.created_at
    });
});

socket.on( 'new_chat_kelas', function( data ) {
    io.sockets.emit( data.tabelchat, {
        idleveluser: data.idleveluser,
        nama: data.nama,
        level: data.level,
        idchat: data.idchat,
        pesan: data.pesan,
        file: data.file,
        reply: data.reply,
        created_at: data.created_at
    });
});

socket.on( 'change_chat_status', function( data ) {
    io.sockets.emit( 'change_status'+data.tabelchat, {
        status: data.status
    });
});

/*
socket.on('disconnect', function () {
    console.log( "Client disconnected !" );
});
*/});

And this is my Android code这是我的 Android 代码

try {
//if you are using a phone device you should connect to same local network as your laptop and disable your pubic firewall as well
        socket = IO.socket("http://192.168.100.13:3000");
        socket.connect();

    } catch (URISyntaxException e) {
        e.printStackTrace();
    }
    refreshChat(url);
    getTabelKelas();
    getDiskusiChat(sharedDiskusi.getSpdiskusi());


private void getDiskusiChat(String tabelChat) {
    socket.on(tabelChat, new Emitter.Listener() {

        @Override
        public void call(final Object... args) {
            getActivity().runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    JSONObject data = (JSONObject) args[0];
                    String jsonStr = data.toString();
                    Log.d("cek", "cek data : "+data);
                    Toast.makeText(mContext, (CharSequence) data, Toast.LENGTH_LONG).show();
                    try {
                        //extract data from fired event
                        String cek = String.valueOf(data.getJSONArray("idleveluser"));
//                            String nickname = data.getString("senderNickname");
//                            String message = data.getString("message");

                            // make instance of message
//
//                            Message m = new Message(nickname,message);
//                            Message m = new Message(nickname,message);
//
//
//                            //add the message to the messageList
//
//                            MessageList.add(m);
//
//                            // add the new updated list to the dapter
//                            chatBoxAdapter = new ChatBoxAdapter(MessageList);
//
//                            // notify the adapter to update the recycler view
//
//                            chatBoxAdapter.notifyDataSetChanged();
//
//                            //set the adapter for the recycler view
//
//                            myRecylerView.setAdapter(chatBoxAdapter);

                    } catch (JSONException e) {
                        e.printStackTrace();
                    }


                }
            });

        }
    });
}

i have try to Toast and log it but did not appear.我曾尝试 Toast 并记录它,但没有出现。 Can anyone help me to retrieve data ?I confuse how to get data if the data in the form of an array.谁能帮我检索数据?如果数据是数组形式,我很困惑如何获取数据。 I'm helped if someone helps me.如果有人帮助我,我就会得到帮助。 Sry for my bad english brother.为我糟糕的英语兄弟感到难过。

This is my log这是我的日志在此处输入图片说明

Change this code line更改此代码行

String cek = String.valueOf(data.getJSONArray("idleveluser"));

to

String cek = String.valueOf(data.getString("idleveluser"));

as each item in the data object is a string.因为数据对象中的每一项都是一个字符串。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM