Android4.0 以后不允许在主线程进行网络连接

时间:2024-04-10 13:36:10

Android4.0 以后不允许在主线程进行网络连接,否则会出现 android.os.NetworkOnMainThreadException。因此,必须另起一个线程进行网络连接方面的操作。

package com.lujinhong.irmcdc.dao;

import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner; public class ResourceDao { String returnLine = "hi"; public String getAllContentByName() {
Runnable r = new NetWorkHandler();
Thread thread = new Thread(r);
thread.start(); try {
Thread.sleep(15000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return returnLine;
} private class NetWorkHandler implements Runnable { String line = "line";
Socket socket = null;
Scanner scanner = null;
@Override
public void run() {
try {
socket = new Socket("time-A.timefreq.bldrdoc.gov", 13);
scanner = new Scanner(socket.getInputStream());
while (scanner.hasNextLine()) {
line = scanner.nextLine();
returnLine += line;
} } catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
scanner.close();
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}

1、由于网络连接需要一定时间,为了在主界面上进行网络信息的展现,暂时用sleep()方法简单实现,使主线程等待网络信息读取完成。

Thread.sleep(5000);