我正在创建一个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。