Socket.IO聊天不适用于Android App

时间:2019-09-07 14:43:31

标签: java android socket.io

我正在创建一个android应用,我想为其做一个聊天部分。问题,当我尝试发送消息时,什么也没出现。在控制台中,任何连接消息都不会出现。

因此,我尝试在Web浏览器中打开URL,并且可以正常工作。我有一个连接消息。 如果您问有关我的代码的问题(请参阅下文),我已经测试了列表适配器。我很确定问题出在android应用和网络服务器之间的通讯。

Android聊天片段:

public class ChatFragment extends Fragment {

    private ChatFragment activity;
    private EditText input;
    private ImageView fab;
    private ListView listView;

    ArrayList<String> userArray = new ArrayList<String>();
    ArrayList<String> msgArray = new ArrayList<String>();
    ArrayList<String> dateArray = new ArrayList<String>();

    CustomListAdapter whatever;

    private Socket mSocket;
    {
        try {
            mSocket = IO.socket("http://##########");
        } catch (URISyntaxException e) {}
    }

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_chat, container, false);
    }

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {

        whatever = new CustomListAdapter(this, userArray, msgArray, dateArray);

        this.activity = this;

        //Associating visual elements to variables
        fab = (ImageView) getView().findViewById(R.id.fab);
        input = (EditText) getView().findViewById(R.id.input);

        //Defining the event for new messages
        mSocket.on("chat message", onNewMessage);
        //Start connection with server
        mSocket.connect();

        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                //Sending the message to online chat
                attemptSend();

                // Clear the input
                input.setText("");
            }
        });

    }

    private void attemptSend() {
        String message = input.getText().toString().trim();
        if (TextUtils.isEmpty(message)) {
            return;
        }

        mSocket.emit("chat message", message);
    }

    private Emitter.Listener onNewMessage = new Emitter.Listener() {
        @Override
        public void call(final Object... args) {
            getActivity().runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    JSONObject data = (JSONObject) args[0];
                    String username;
                    String message;
                    try {
                        username = data.getString("username");
                        message = data.getString("message");
                    } catch (JSONException e) {
                        return;
                    }

                    // add the message to view
                    addMessage(username, message);
                }
            });
        }
    };

    public void addMessage(String user, String msg){


        SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss", Locale.getDefault());
        String currentDateandTime = sdf.format(new Date());

        userArray.add(user);
        msgArray.add(msg);
        dateArray.add(currentDateandTime);



        listView = (ListView) getView().findViewById(R.id.list_of_messages);
        listView.setAdapter(whatever);

    }

}

服务器HTML代码:

<!doctype html>
<html>
  <head>
    <title>Public chat</title>
  </head>
  <body>
    <script src="/socket.io/socket.io.js"></script>
    <script src="https://code.jquery.com/jquery-1.11.1.js"></script>
    <script>
      $(function () {
        var socket = io();
        $('form').submit(function(e){
          e.preventDefault(); // prevents page reloading
          socket.emit('chat message', $('#m').val());
          $('#m').val('');
          return false;
        });
        socket.on('chat message', function(msg){
          $('#messages').append($('<li>').text(msg));
        });
      });
    </script>
  </body>
</html>

服务器NodeJs代码:

var app = require('express')();
var http = require('http').createServer(app);
var io = require('socket.io')(http);

app.get('/', function(req, res){
  res.sendFile(__dirname + '/index.html');
});

io.on('connection', function(socket){
  console.log('Un utilisateur c\'est connecté');
  socket.on('disconnect', function(){
    console.log('Un utilisateur c\'est déconnecté');
  });
  socket.on('chat message', function(msg){
    console.log('message: ' + msg);
    io.emit('chat message', msg);
  });
});

http.listen(80, function(){
  console.log('listening on *:3000');
});

我希望您能帮助我解决我的错误,这是有关使用Websocket的新手。

非常感谢。 MisterTM82。

0 个答案:

没有答案