如果我尝试从网站下载图像(使用 http 连接),如果在我的 android 服务中执行下载,我没有问题,而如果我尝试从 Activity 下载文件的相同方法,则会发生此错误:
11-08 13:27:36.800: W/System.err(8010): android.os.NetworkOnMainThreadException
11-08 13:27:36.800: W/System.err(8010): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1077)
11-08 13:27:36.800: W/System.err(8010): at java.net.InetAddress.lookupHostByName(InetAddress.java:477)
11-08 13:27:36.800: W/System.err(8010): at java.net.InetAddress.getAllByNameImpl(InetAddress.java:277)
11-08 13:27:36.800: W/System.err(8010): at java.net.InetAddress.getAllByName(InetAddress.java:249)
11-08 13:27:36.800: W/System.err(8010): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnection.<init>(HttpConnection.java:69)
11-08 13:27:36.800: W/System.err(8010): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnection.<init>(HttpConnection.java:48)
11-08 13:27:36.800: W/System.err(8010): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnection$Address.connect(HttpConnection.java:304)
11-08 13:27:36.800: W/System.err(8010): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnectionPool.get(HttpConnectionPool.java:89)
11-08 13:27:36.800: W/System.err(8010): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.getHttpConnection(HttpURLConnectionImpl.java:292)
11-08 13:27:36.800: W/System.err(8010): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.makeConnection(HttpURLConnectionImpl.java:274)
11-08 13:27:36.800: W/System.err(8010): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.retrieveResponse(HttpURLConnectionImpl.java:1038)
11-08 13:27:36.800: W/System.err(8010): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.getHeaderField(HttpURLConnectionImpl.java:481)
11-08 13:27:36.800: W/System.err(8010): at java.net.URLConnection.getHeaderFieldInt(URLConnection.java:572)
11-08 13:27:36.800: W/System.err(8010): at java.net.URLConnection.getContentLength(URLConnection.java:335)
我以这种方式解决了从Activity调用我的下载方法的问题:
new Thread(new Runnable() {
public void run() {
downloadFile(imagePath);
}
}).start();