我正在尝试在java-pc服务器和Android应用程序之间实现一个简单的聊天应用程序。
我在网上发现了一些教程,以得出几乎令人满意的结果。
我的问题如下:由于某种原因,我可以收到消息到我的服务器,但当我从我的服务器(电脑)发送它时,我的Android手机无法读取字符串。
以下是java-pc程序发送消息的部分: 首先是发送按钮方法:
public void sendMessageBtn(){
String message = userText.getText();
userText.setText("");
chatWindow.appendText("Server : "+ message + "\n");
// send the message to the client
mServer.sendMessage(message);
}
这是我的ServerClass中的sendMessage(message)方法:
public void sendMessage(String message){
System.out.println("Message blocked here");
if(mOut != null){
System.out.println("Message : " + message + " sent");
mOut.println();
mOut.flush();
System.out.println("Message fully sent");
}
}
当我收到所有println();
时,一切似乎都在这方面起作用在电话方面,这是从我的asynk类覆盖监听器的方法:
public class connectTask extends AsyncTask<String, String, TCPClient>{
@Override
protected TCPClient doInBackground(String... message) {
// We crape a tpc client object and ...
mTcpClient = new TCPClient(new OnMessageReceived() {
// ... we implement the messageReceived previously defined as an interface
@Override
public void messageReceived(String message) {
// this method calls the onProgressUpdate
Log.e("messagedReceive method :", message);
publishProgress(message);
// Toast.makeText(getApplicationContext(),serverMessage,Toast.LENGTH_LONG).show();
}
});
mTcpClient.run();
return null;
}
@Override
protected void onProgressUpdate(String... values) {
super.onProgressUpdate(values);
// Log.e("On progressedUpdate", "super passed");
// in the arrayList we add the message from the server
// arrayList.add("Message received");
Log.e("MainActivity: ", "onProgressedUpdate call");
arrayList.add("Server: "+values[0]);
// notify the adapter that the data set has changed. This means that new message received
// from server was added to the list
mAdapter.notifyDataSetChanged();
}
}
根据我的理解,当收到消息时,感觉值[0]为空,或者至少有一条消息是因为我的所有Log.e都被激活,表明onReceive方法已被激活。
在此先感谢您的帮助,我已经在这方面工作了一段时间并开始变得绝望;)。
亲切的问候, 甲
答案 0 :(得分:1)
服务器端代码存在问题。
检查您的sendMessage
方法。
您没有向OutputStream
mOut
发送消息。所以在if
块中进行。
if(mOut != null) {
System.out.println("Message : " + message + " sent");
mOut.pritnln(message);
mOut.println();
mOut.flush();
System.out.println("Message fully sent");
}