android4.0后不能再UI主线程中使用socket了,在子线程中使用socket出了问题。可以建立连接,while(true)里的内容都执行不了,不知道为什么啊
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Intent intent = new Intent();
intent.setClass(MainActivity.this, UsbDongleService.class);
bindService(intent,connection,Context.BIND_AUTO_CREATE);
edt = (EditText) findViewById (R.id.editText1);
Thread th = new Thread(new Runnable(){
@Override
public void run() {
// TODO Auto-generated method stub
try {
socket = new Socket("192.168.1.55",4800);
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);
} catch (UnknownHostException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
while(true){
Log.d("socket", "1");
//out.print(tv.getText());
if(socket.isConnected()){
if(!socket.isInputShutdown()){
try {
if((recMSG = in.readLine()) != null){
//edt.setText("\n");
Log.d("socket", in.readLine());
socketHandler.sendMessage(socketHandler.obtainMessage());
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
if(servicedata){
Log.d("socket", "output");
servicedata = false;
out.println(tv.getText());
}
}
}
}
}
}
});
th.start();
}
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Intent intent = new Intent();
intent.setClass(MainActivity.this, UsbDongleService.class);
bindService(intent,connection,Context.BIND_AUTO_CREATE);
edt = (EditText) findViewById (R.id.editText1);
Thread th = new Thread(new Runnable(){
@Override
public void run() {
// TODO Auto-generated method stub
try {
socket = new Socket("192.168.1.55",4800);
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);
} catch (UnknownHostException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
while(true){
Log.d("socket", "1");
//out.print(tv.getText());
if(socket.isConnected()){
if(!socket.isInputShutdown()){
try {
if((recMSG = in.readLine()) != null){
//edt.setText("\n");
Log.d("socket", in.readLine());
socketHandler.sendMessage(socketHandler.obtainMessage());
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
if(servicedata){
Log.d("socket", "output");
servicedata = false;
out.println(tv.getText());
}
}
}
}
}
}
});
th.start();
}
解决方案 »
- android模拟器无法启动的问题
- android 4.0.4webkit版本号是多少?怎么查
- activity切换
- Android编译HAL模块遇到问题,求教
- ListView中的ProgressBar不能获得焦点
- 看到几篇好文章,可惜英语太差,高分求翻译
- 求Android的书!
- 刷机只能用该手机型号指定的ROM文件?
- 多activity还是单activity的选择
- 求助,一个运行时出现的错误,5.0以下版本的模拟器不报错,7.0的真机和模拟器也不报错,5.0版本的模拟器和5.1.1的真机报错,并没有指定错误的位置
- 请教android进程的一个问题
- 请教大家一个eclipse开发android的问题
socketHandler.sendMessage(socketHandler.obtainMessage());
obtainMessage方法要参数吗?
是不是这个地方不动了? 如果服务器没发送数据那就不会动了。
或者你需要先发送数据给服务器。
对,是停在这里了,不过把这里readLine()这一块注释掉后,app一起来就强制关闭了,导致错误的应该是
out.println(tv.getText());这一句,不知道这一句为什么错了