当我在HTC Wildfire S(API10,android 2.3.3)中使用我的代码时,这很好用。但是,如果我运行三星Galaxy S4(API19,android 4.4.2),它不起作用(应用程序启动和关闭;没有任何反应)。服务器在我的本地计算机上(Hercules Program)。当然,我在清单中添加了许可(INTERNET)。
代码是:
try{
Socket s = new Socket("192.168.1.13", 6914);
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
String outMsg = "";
outMsg = "This is Client";
out.write(outMsg);
out.flush();
out.close();
s.close();
} catch (IOException e) {
e.printStackTrace();
}
那么你能帮助我并说明问题所在吗?我没有根我的三星手机。
答案 0 :(得分:0)
看起来您正在主(UI)线程中运行与网络相关的代码。在Android 1.x和2.x上,不推荐使用它,因为它可能导致UI冻结。自从Android 3.x(它在Android 4.x和5.0中仍然有效)以来,该平台现在严格禁止它。如果您有机会阅读日志,您将获得NoNetworkInMainThreadException
。
要实现此类测试,我建议您使用Thread
:
new Thread() {
public void run() {
// Your network code, it will run on another thread
}
}.start();
如果您需要将结果返回主线程(某些时候可能需要),您需要查看更复杂的模式,如AsyncTask
。