Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android聊天信息不显示_Java_Android_Sockets_Client_Client Server - Fatal编程技术网

Java Android聊天信息不显示

Java Android聊天信息不显示,java,android,sockets,client,client-server,Java,Android,Sockets,Client,Client Server,我的客户端/服务器应用程序有问题。 客户端在android上,服务器是java应用程序 当我在java桌面应用程序上启动服务器和客户端时,一切都很好。但当我启动安卓应用程序时,会出现bug。来自服务器的消息在android上可见,但来自android本身或其他客户端的消息则不可见 || 没有错误,但消息不会显示 @更新 在android上,我看不到来自客户端本身的消息,也看不到来自其他聊天客户端的消息。我只看是否有新的人加入聊天。我觉得沟通有问题吗?但我不知道是什么 @update2 我注意到程

我的客户端/服务器应用程序有问题。 客户端在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中添加了该行?