java - 如何使用Socket从 Node 服务器获取数据?

标签 java android node.js socket.io real-time-data

我在从 Node 服务器获取数据时遇到问题,我从互联网上搜索了许多引用资料,但我还没有找到可以解决我的问题的资料。 这是我的 Node 服务器

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 !" );
});
*/});

这是我的 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();
                    }


                }
            });

        }
    });
}

我尝试Toast并记录它,但没有出现。 谁能帮我检索数据?如果数据是数组形式,我很困惑如何获取数据。如果有人帮助我,我就会得到帮助。 为我英语不好的兄弟感到难过。

这是我的日志 enter image description here

最佳答案

更改此代码行

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

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

因为数据对象中的每个项目都是一个字符串。

关于java - 如何使用Socket从 Node 服务器获取数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59819934/

相关文章:

node.js - Express + Passport : req. 用户在每次代码保存时重置

javascript - Node (Gulp)process.stdout.write 到文件

java - 从 Android HTC 相机拍照时出现空指针异常

java - 为 gRPC ServerInterceptors 设置执行顺序

java - 从相机捕获图像并设置到android中的 ListView 中

android - 如何链接到特定的偏好组

node.js - 获取行的单元格

java - 我们可以在 jboss.xml 中使用环境值吗

android - 多行 TextView 有两种不同的行为

php - 服务器未找到错误,000Webhost 域和 Ion 库用于数据发送?