java - Android:openStream 在 URL 对象上失败
问题描述
我正在尝试在 android 上测试下载一个文件,但它失败了。在代码中,我首先从 URL 对象打开一个流:
import android.util.Log;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.nio.channels.Channels;
import java.nio.channels.ReadableByteChannel;
public class Downloader {
public static void downloadFile(String address, String outputFileName) throws IOException {
Log.e("JAVA_FILE_DOWNLOADER", "0");
URL url = new URL(address);
Log.e("JAVA_FILE_DOWNLOADER", "1");
try
{
Log.e("JAVA_FILE_DOWNLOADER", "1.5");
InputStream in = url.openStream();
Log.e("JAVA_FILE_DOWNLOADER", "2");
ReadableByteChannel rbc = Channels.newChannel(in);
Log.e("JAVA_FILE_DOWNLOADER", "3");
FileOutputStream fos = new FileOutputStream(outputFileName);
Log.e("JAVA_FILE_DOWNLOADER", "4");
fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
Log.e("JAVA_FILE_DOWNLOADER", "5");
}catch (IOException e) {
Log.e("JAVA_FILE_DOWNLOADER", "exception catched 1", e);
e.printStackTrace();
}
}
}
然后我让代码在一个线程中运行:
new Thread(new Runnable() {
public void run() {
try {
Downloader.downloadFile("http://ipv4.download.thinkbroadband.com/5MB.zip", "/sdcard/data/Cat03.jpg");;
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
打印后代码失败JAVA_FILE_DOWNLOADER 1.5"
。并且堆栈跟踪如下所示:
java.net.UnknownHostException: Unable to resolve host "ipv4.download.thinkbroadband.com": No address associated with hostname
at java.net.InetAddress.lookupHostByName(InetAddress.java:424)
at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)
at java.net.InetAddress.getAllByName(InetAddress.java:214)
at com.android.okhttp.internal.Dns$1.getAllByName(Dns.java:28)
at com.android.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:216)
at com.android.okhttp.internal.http.RouteSelector.next(RouteSelector.java:122)
at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:292)
at com.android.okhttp.internal.http.HttpEngine.sendSocketRequest(HttpEngine.java:255)
at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:206)
at com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:345)
at com.android.okhttp.internal.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:296)
at com.android.okhttp.internal.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:179)
at java.net.URL.openStream(URL.java:470)
at worldline.atos.com.spicatemplate.Downloader.downloadFile(Downloader.java:27)
at worldline.atos.com.spicatemplate.MyService$1.run(MyService.java:178)
at java.lang.Thread.run(Thread.java:841)
Caused by: libcore.io.GaiException: getaddrinfo failed: EAI_NODATA (No address associated with hostname)
at libcore.io.Posix.getaddrinfo(Native Method)
at libcore.io.ForwardingOs.getaddrinfo(ForwardingOs.java:61)
at java.net.InetAddress.lookupHostByName(InetAddress.java:405)
... 15 more
有人可以告诉我该怎么做吗?
解决方案
推荐阅读
- python - Python 编写一个 .txt 文件
- python - 在 IPython 终端中编辑文本文件而不切换终端
- node.js - GraphQL Typescript - 如何检查令牌并将用户添加到请求
- android - 转换错误 Mongodb Nodejs
- sql - 创建月度报告
- bash - 了解 sed 命令
- javascript - React onDrag 对于 screenX/screenY 总是以 0 结尾
- python - 将 python 字典转换为 MATLAB
- php - 为什么 eloquent 中的胶囊在 slim 中需要 setAsglobal() 方法
- c# - 在 C# 中创建泛型函数以将数组转换为字典