flush闪退,求大神指点

weixin_38582510 2018-01-25 11:56:20
//===========================================================================================
//======================================= socket线程 ======================================
//===========================================================================================
//===========================================================================================
//内部类 socket线程
class SocketThread extends Thread
{
Socket socket = null;
private Message Msg;
InetAddress serverAddress;

BufferedReader inString;//socket输入流
PrintWriter outString; //socket输出流

String str;
String strHead;
String strContent;
Integer strLen;

//连接到服务器
boolean ConnectToServer()
{
try
{
socket=((AppSocket)getApplication()).getSocket();

//在socket线程中 调用 主线程(UI线程)的Handler已完成至子线程向主线程发送消息

inString =new BufferedReader(new InputStreamReader(socket.getInputStream(),"GBK"));
outString=new PrintWriter(socket.getOutputStream());

//向服务器发送 DL请求(请求发回大类字符串)
outString.println("DL");
outString.flush();//这里不会闪退
return(true);


}catch(IOException e){
e.printStackTrace();
return(false);
}finally{

}
}
void sendMsg()
{
outString.println("DL");
//outString.flush();

}

//监听服务器送来的消息
void ListenInformationFormServer()
{
while(true)
{
try
{
str="";
strHead="";
strContent="";
strLen=0;

str=inString.readLine();
//监听到消息,则发送到主线程进行消息处理
strHead = str.substring(0,2);//从0开始,到2结束(即读取0、1两个字符)
strLen = str.length();
strContent=str.substring(2,strLen);//消息正本

switch(strHead)
{
case "DL":
{
StockHandler.sendMessage(StockHandler.obtainMessage(0,strContent) );
break;
}
case "MC":
{
StockHandler.sendMessage(StockHandler.obtainMessage(1,strContent) );
break;
}
case "DG":
{
StockHandler.sendMessage(StockHandler.obtainMessage(2,strContent) );
break;
}
case "KC":
{
//strContent = strContent.replace("@","\n");
StockHandler.sendMessage(StockHandler.obtainMessage(3,strContent) );
break;
}
default:
{

}
}

}catch(IOException e){
e.printStackTrace();
//try {
//socket.close();
//inString.close();
//outString.close();
//}catch(IOException f){
// f.printStackTrace();
//}

}finally{
}
}
}

//子线程入口
public void run()
{
if (ConnectToServer())//连接到服务器
{
ListenInformationFormServer(); //监听服务器消息
}
else
{

}
}

//子线程Handler消息处理 UI线程调用该Handler以完成UI线程向子线程发送消息
public Handler socketHandler = new Handler()
{
public void handleMessage(Message Msg)
{
switch (Msg.what)
{
case 0://Activity onDestroy
{
try
{
socket.close();
inString.close();
outString.close();
}catch(IOException e){
e.printStackTrace();
}
break;
}
case 1://socket.out
{
outString.println(Msg.obj.toString());
outString.flush();//这里闪退
break;
}
default:
{

}
}
}

};


闪退的地方是在主线程里面这么引用的
socketThread.socketHandler.sendMessage(message);


弱弱的再问下主线程中往子线程handler里面送消息,这种写法对不对,
还是直接在子线程中写一个socket输出流发送消息的函数,然后在主线程中调用就可以
(这种写法我试了到flush那一步还是闪退)?

VB业余程序员初学java做安卓开发,跪求大神指点。
这个代码在安卓4.0还是5.0的一台手机上是没问题的,现在这部7.0就不行了
...全文
1375 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
ywl470812087 2018-02-06
  • 打赏
  • 举报
回复
线程这个好像有点难,你写的太长不方便阅读,也没有看懂
weixin_38582510 2018-01-26
  • 打赏
  • 举报
回复
大神在哪里

62,612

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧