socket中BufferedReader数据已经加载进去就是不在前台显示,中断服务器端才能在手机上显示
银河小分队 2017-01-03 09:15:17 package com.example.myxu;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity {
EditText ip=null;
EditText editText=null;
TextView text=null;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ip=(EditText) findViewById(R.id.ip);
editText=(EditText) findViewById(R.id.editText);
text=(TextView) findViewById(R.id.textView2);
findViewById(R.id.connect).setOnClickListener(new OnClickListener() {
public void onClick(View v) {
conncet();
}
});
findViewById(R.id.send).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
send();
}
});
}
//------------------------------
Socket socket=null;
BufferedReader reader=null;
BufferedWriter writer=null;
//获得链接
public void conncet(){
AsyncTask<Void, String, Void> read=new AsyncTask<Void, String, Void>(){
@Override
protected Void doInBackground(Void... arg0 ) {
try {
//建立连接
socket=new Socket(ip.getText().toString(),5000);
writer=new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
reader=new BufferedReader(new InputStreamReader(socket.getInputStream()));
//作为onProgressUpdate()方法用
publishProgress("@success");
String line;
while ((line=reader.readLine())!=null) {
publishProgress(line);
}
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onProgressUpdate(String... values) {
if (values[0].equals("@success")) {
Toast.makeText(MainActivity.this, "socket链接成功", Toast.LENGTH_SHORT).show();
}
//数据添加到手机上
text.append("服务器:"+values[0].toString()+"\n");
super.onProgressUpdate(values);
}
};
read.execute();
}
//发送内容
public void send(){
try {
writer.write(editText.getText().toString()+"\n");
text.append("我:"+editText.getText().toString()+"\n");
writer.flush();
//清空编辑框
editText.setText("");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
reader=new BufferedReader(new InputStreamReader(socket.getInputStream()));
有错误吗?下面是日志:
?:??: W/?(?): logcat read failure: Connection refused
: E/(): Device disconnected: 1
reander中有数据,但是不在手机端显示,必须关闭服务端,然后一下都显示出来。用了clone()无效!
请大神教教我吧