Java Android聊天信息不显示
我的客户端/服务器应用程序有问题。 客户端在android上,服务器是java应用程序 当我在java桌面应用程序上启动服务器和客户端时,一切都很好。但当我启动安卓应用程序时,会出现bug。来自服务器的消息在android上可见,但来自android本身或其他客户端的消息则不可见 || 没有错误,但消息不会显示 @更新 在android上,我看不到来自客户端本身的消息,也看不到来自其他聊天客户端的消息。我只看是否有新的人加入聊天。我觉得沟通有问题吗?但我不知道是什么 @update2 我注意到程序不执行这部分代码Java Android聊天信息不显示,java,android,sockets,client,client-server,Java,Android,Sockets,Client,Client Server,我的客户端/服务器应用程序有问题。 客户端在android上,服务器是java应用程序 当我在java桌面应用程序上启动服务器和客户端时,一切都很好。但当我启动安卓应用程序时,会出现bug。来自服务器的消息在android上可见,但来自android本身或其他客户端的消息则不可见 || 没有错误,但消息不会显示 @更新 在android上,我看不到来自客户端本身的消息,也看不到来自其他聊天客户端的消息。我只看是否有新的人加入聊天。我觉得沟通有问题吗?但我不知道是什么 @update2 我注意到程
protected Void doInBackground(String... params)
{
message = params[0].toString();
Log.e("CLIENT","Message In Background: "+message);
if (out != null && !out.checkError()) {
out.println(message);
out.flush();
Log.e("CLIENT","Message send"+message);
}
return null;
}
我调用它,但在日志监视器中,我没有从发送者类获取消息
Log.e("CLIENT","Create sender");
Sender sender = new Sender();
sender.execute(message);
Log.e("CLIENT","sender.execute");
信息:
01-17 17:15:39.330 8232-8232/com.example.testmulti E/Home: Application start
01-17 17:15:39.596 8232-8259/com.example.testmulti E/EGL_emulation: tid 8259: eglSurfaceAttrib(1174): error 0x3009 (EGL_BAD_MATCH)
01-17 17:15:52.137 8232-8232/com.example.testmulti E/ServerIP: Server ip is: 192.168.0.102
01-17 17:15:52.266 8232-8232/com.example.testmulti E/MainActivity: Start Main Activity
01-17 17:15:52.325 8232-8262/com.example.testmulti E/serverAddr: /192.168.0.102
01-17 17:15:52.325 8232-8262/com.example.testmulti E/TCP Client: C: Connecting...
01-17 17:15:52.342 8232-8262/com.example.testmulti E/TCP Server IP: 192.168.0.102
01-17 17:15:52.343 8232-8262/com.example.testmulti E/TCP Client: C: Sent.
01-17 17:15:52.343 8232-8262/com.example.testmulti E/TCP Client: C: Done.
01-17 17:15:52.560 8232-8259/com.example.testmulti E/EGL_emulation: tid 8259: eglSurfaceAttrib(1174): error 0x3009 (EGL_BAD_MATCH)
01-17 17:15:59.416 8232-8232/com.example.testmulti E/MainActivity: Button was clicked
01-17 17:15:59.417 8232-8232/com.example.testmulti E/CLIENT: Create sender
01-17 17:15:59.419 8232-8232/com.example.testmulti E/CLIENT: sender.execute
因此它不执行sender.execute(message)强>
如何击退它
主要活动
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
arrayList = new ArrayList<String>();
final EditText editText = (EditText) findViewById(R.id.editText);
Button send = (Button)findViewById(R.id.send_button);
mList = (ListView)findViewById(R.id.list);
mAdapter = new MyCustomAdapter(this, arrayList);
mList.setAdapter(mAdapter);
new connectTask().execute("");
send.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String message = editText.getText().toString();
if (mClient != null) {
mClient.sendMessage(message);
}
mAdapter.notifyDataSetChanged();
editText.setText("");
}
});
}
public class connectTask extends AsyncTask<String,String,Client> {
@Override
protected Client doInBackground(String... message) {
mClient = new
Client(new Client.OnMessageReceived() {
@Overrid
public void messageReceived(String message) {
publishProgress(message);
}
});
mClient.run();
return null;
}
@Override
protected void onProgressUpdate(String... values) {
super.onProgressUpdate(values);
arrayList.add(values[0]);
mAdapter.notifyDataSetChanged();
}
}
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
arrayList=新的arrayList();
final EditText EditText=(EditText)findViewById(R.id.EditText);
按钮发送=(按钮)findViewById(R.id.send_按钮);
mList=(ListView)findViewById(R.id.list);
mAdapter=新的MyCustomAdapter(此为arrayList);
mList.setAdapter(mAdapter);
新建connectTask()。执行(“”);
send.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
String message=editText.getText().toString();
如果(mClient!=null){
mClient.sendMessage(消息);
}
mAdapter.notifyDataSetChanged();
editText.setText(“”);
}
});
}
公共类connectTask扩展了AsyncTask{
@凌驾
受保护的客户端doInBackground(字符串…消息){
mClient=new
客户机(新客户机.OnMessageReceived(){
@凌驾
已接收公共无效消息(字符串消息){
出版进度(信息);
}
});
mClient.run();
返回null;
}
@凌驾
受保护的void onProgressUpdate(字符串…值){
super.onProgressUpdate(值);
arrayList.add(值[0]);
mAdapter.notifyDataSetChanged();
}
}
客户端类
public void sendMessage(String message)
{
Sender sender = new Sender();
sender.execute(message);
}
public void run() {
mRun = true;
try {
InetAddress serverAddr = InetAddress.getByName(SERVERIP);
Log.e("serverAddr", serverAddr.toString());
Log.e("TCP Client", "C: Connecting...");
Socket socket = new Socket(serverAddr, SERVERPORT);
Log.e("TCP Server IP", SERVERIP);
try {
out = new PrintWriter(new BufferedWriter(
new OutputStreamWriter(socket.getOutputStream())), true);
Log.e("TCP Client", "C: Sent.");
Log.e("TCP Client", "C: Done.");
in = new BufferedReader(new InputStreamReader(
socket.getInputStream()));
while (mRun) {
serverMessage = in.readLine();
if (serverMessage != null && mMessageListener != null) {
mMessageListener.messageReceived(serverMessage);}
serverMessage = null;
}
Log.e("RESPONSE FROM SERVER", "S: Received Message: '"
+ serverMessage + "'");
} catch (Exception e) {Log.e("TCP", "S: Error", e);
}finally {socket.close();}
} catch (Exception e) {Log.e("TCP", "C: Error", e);}
}
public class Sender extends AsyncTask<String, String, Void>
{
private String message;
@Override
protected Void doInBackground(String... params)
{
message = params[0].toString();
if (out != null && !out.checkError()) {
out.println(message);
out.flush();
}
return null;
}
}
public void发送消息(字符串消息)
{
发送方=新发送方();
sender.execute(消息);
}
公开募捐{
mRun=真;
试一试{
InetAddress serverAddr=InetAddress.getByName(SERVERIP);
Log.e(“serverAddr”,serverAddr.toString());
Log.e(“TCP客户端”,“C:连接…”);
Socket Socket=新套接字(serverAddr,SERVERPORT);
Log.e(“TCP服务器IP”,SERVERIP);
试一试{
out=新的PrintWriter(新的BufferedWriter(
新的OutputStreamWriter(socket.getOutputStream()),true);
e(“TCP客户端”,“C:已发送”);
Log.e(“TCP客户端”,“C:完成”);
in=新的BufferedReader(新的InputStreamReader(
getInputStream());
while(mRun){
serverMessage=in.readLine();
if(serverMessage!=null&&mMessageListener!=null){
mMessageListener.messageReceived(serverMessage);}
serverMessage=null;
}
Log.e(“来自服务器的响应”,“S:收到的消息:”
+serverMessage+“'”);
}catch(异常e){Log.e(“TCP”,“S:Error”,e);
}最后{socket.close();}
}catch(异常e){Log.e(“TCP”,“C:Error”,e);}
}
公共类发送方扩展异步任务
{
私有字符串消息;
@凌驾
受保护的Void doInBackground(字符串…参数)
{
message=params[0].toString();
if(out!=null&&!out.checkError()){
out.println(消息);
out.flush();
}
返回null;
}
}
也许您必须在发送的onClick中将消息添加到您的列表中
[...]
arrayList.add(message);
mAdapter.notifyDataSetChanged();
[...]
是的,但在android上,我看不到来自其他客户端的消息,在java客户端,我看不到android消息。您是否在发送的onClickListener中添加了该行?