首先请原谅我的英语,因为我的英语不好。我正在寻找一种从带有套接字io的nodeJS服务器检索android发送信息的方法。我的印象是这是版本问题。我的代码编译得很好,我没有设法检索JS对象中包含的信息。 这是服务器代码
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
var data ={"msg": "hello i am the server"};
io.on('connection',function(socket){
console.log('one user connected '+socket.id);
socket.on('message',function(obj){
console.log(obj.text);
socket.emit('take', data);
})
socket.on('disconnect',function(){
console.log('one user disconnected '+socket.id);
})
})
http.listen(3000,function(){
console.log('server listening on port 3000');
})
我正在寻找的信息是“数据”
这是我使用的Java代码,我更愿意将整个代码放在其他地方
public class MainActivity extends AppCompatActivity {
private Socket socket;
public String ReceiveMsg ="message par defaut ";
{
try {
socket = IO.socket("http://192.168.43.168:3000");
socket.connect();
} catch (URISyntaxException e) {
}
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
EditText editText = (EditText) findViewById(R.id.editText);
TextView textView = (TextView) findViewById(R.id.textView);
Button but = (Button) findViewById(R.id.button);
socket.connect();
String msg = takemsg(editText);
sendMsg(msg);
socket.on("take", handleIncomingMessages);
textView.setText(getAz(ReceiveMsg));
}
public String takemsg(EditText editText){
String msg = "message par defaut ";
msg = editText.getText().toString();
return msg;
}
public void sendMsg(String msg ){
JSONObject obj = new JSONObject();
try{
obj.put("text", msg);
socket.emit("message", obj);
}catch (JSONException e){
}
}
private Emitter.Listener handleIncomingMessages = new Emitter.Listener(){
@Override
public void call(final Object... args){
runOnUiThread(new Runnable() {
@Override
public void run() {
JSONObject data = (JSONObject) args[0];
try {
ReceiveMsg = data.getString("msg");
} catch (JSONException e) {
}
}
});
}
};
}
答案 0 :(得分:0)
首先,我认为我们需要更多数据。
服务器的输出是什么?连接是否良好?请检查您的android代码是否正在运行。
如果没有连接,请尝试使用opts设置端口
...
try {
IO.Options opts = IO.Options();
opts.port = 3000;
socket = IO.socket("http://192.168.43.168", opts);
socket.connect();
} catch (URISyntaxException e) {
...
检查您的服务是否仍然有效。对于服务而言,存在一些回报,可以使您的服务保持正常运行。
https://developer.android.com/reference/android/app/Service.html#START_STICKY
答案 1 :(得分:0)
我们必须放入清单
<uses-permission android:name="android.permission.INTERNET" />
允许应用程序使用网络