gpt4 book ai didi

java - API 级别较低的设备上的 Android UnkownHostException

转载 作者:行者123 更新时间:2023-12-01 09:35:36 25 4
gpt4 key购买 nike

在较低的 api 级别(例如 15 或 19)(在模拟器和真实设备上)上尝试我的应用程序时,我收到特定 URL 的 UnknownHostException:http://jotihunt-api_v2.mysite123.nl/login mysite123 是虚构的。但我没有收到其他网址(例如 google 的网址)的 UnknownHostException 。所以我觉得 URL 是错误的,但在 API 级别 22 上,例如我没有得到这个异常。我有互联网连接并且拥有所需的权限:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

我使用此代码对 Web API 执行 post/get 请求:

    @Override
protected List<WebResponse> doInBackground(WebRequest... params) {
ArrayList<WebResponse> responses = new ArrayList<>();
WebRequest current;

for(int i = 0; i < params.length; i++)
{
current = params[i];

try {
InetAddress address = InetAddress.getByName(current.getUrl().getHost());
Log.i("WebRequestTask", address.toString());
} catch (UnknownHostException exception) {
Log.e("WebRequestTask", exception.toString(), exception);
}


TRYCATCH:
try
{
if(current.getUrl() == null) break TRYCATCH;

HttpURLConnection connection = (HttpURLConnection)current.getUrl().openConnection();

switch (current.getMethod())
{
case WebRequestMethod.POST:
if(current.hasData())
{
connection.setDoOutput(true);
connection.setRequestMethod(WebRequestMethod.POST);

OutputStreamWriter streamWriter = new OutputStreamWriter(connection.getOutputStream());
streamWriter.write(current.getData());
streamWriter.flush();
streamWriter.close();
}
break;
}

InputStream response;
if(connection.getResponseCode() == 200)
{
/*
* Get the response stream.
* */
response = connection.getInputStream();
}
else
{
/*
* Get the error stream.
* */
response = connection.getErrorStream();
}

/**
* Read the stream.
* */
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(response));
StringBuilder builder = new StringBuilder();
String line;
while ((line = bufferedReader.readLine()) != null) {
builder.append(line);
}
bufferedReader.close();

/**
* Create a response
* */
responses.add(new WebResponse(current, builder.toString(), connection.getResponseCode()));

current.setExecutionDate(new Date());

connection.disconnect();

}
catch(Exception e)
{
/**
* Print the stack trace
* */
e.printStackTrace();

/**
* Log a error.
* */
Log.e("WebRequestTask", e.toString(), e);

/**
* Add a response with as text the error message
* */
responses.add(new WebResponse(current, e.toString(), 0));
}
}
return responses;
}

对象的状态:/image/Zrc7q.jpg

请求的创建和执行:

WebRequest request = new WebRequest.Builder()
.setId(MY_REQUEST_ID)
.setMethod(WebRequestMethod.POST)
.setUrl(new UrlBuilder().append("http://jotihunt-api_v2.mysite123.nl/login").build())
.setData("sfsf")
.create();
request.executeAsync(new WebRequest.OnWebRequestCompletedCallback() {
@Override
public void onWebRequestCompleted(WebResponse response) {
Log.i("",response.getData());
}
});

这是我得到的异常:

08-16 12:33:36.340 4277-4356/nl.rsdt.japp W/System.err: java.net.UnknownHostException: http://jotihunt-api_v2.mysite123.nl/login
08-16 12:33:36.342 4277-4356/nl.rsdt.japp W/System.err: at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:279)
08-16 12:33:36.344 4277-4356/nl.rsdt.japp W/System.err: at com.android.okhttp.internal.http.HttpEngine.sendSocketRequest(HttpEngine.java:255)
08-16 12:33:36.346 4277-4356/nl.rsdt.japp W/System.err: at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:206)
08-16 12:33:36.348 4277-4356/nl.rsdt.japp W/System.err: at com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:345)
08-16 12:33:36.352 4277-4356/nl.rsdt.japp W/System.err: at com.android.okhttp.internal.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:89)
08-16 12:33:36.355 4277-4356/nl.rsdt.japp W/System.err: at com.android.okhttp.internal.http.HttpURLConnectionImpl.getOutputStream(HttpURLConnectionImpl.java:197)
08-16 12:33:36.356 4277-4356/nl.rsdt.japp W/System.err: at com.rsdt.anl.WebRequestTask.doInBackground(WebRequestTask.java:53)
08-16 12:33:36.357 4277-4356/nl.rsdt.japp W/System.err: at com.rsdt.anl.WebRequestTask.doInBackground(WebRequestTask.java:21)
08-16 12:33:36.358 4277-4356/nl.rsdt.japp W/System.err: at android.os.AsyncTask$2.call(AsyncTask.java:288)
08-16 12:33:36.359 4277-4356/nl.rsdt.japp W/System.err: at java.util.concurrent.FutureTask.run(FutureTask.java:237)
08-16 12:33:36.360 4277-4356/nl.rsdt.japp W/System.err: at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
08-16 12:33:36.365 4277-4356/nl.rsdt.japp W/System.err: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
08-16 12:33:36.372 4277-4356/nl.rsdt.japp W/System.err: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
08-16 12:33:36.373 4277-4356/nl.rsdt.japp W/System.err: at java.lang.Thread.run(Thread.java:848)

更新我可以使用 InetAdress 解析主机,但仍然不起作用

更新2经过更多谷歌搜索后,我发现了类似的问题,似乎下划线不是有效的 URL 字符。

来源:

(我不能包含超过 2 个链接,因此我保留了链接的开头)

stackoverflow.com/questions/36074952/unknown-host-exception-using-emulator-and-httpurlconnection

code.google.com/p/android/issues/detail?id=37577

github.com/google/ExoPlayer/issues/239

最佳答案

我更改了主机名,使其不包含下划线,这解决了我的问题。旧版 Android 上的 DNS 似乎不支持带下划线的 URL

来源:

Similiar issue

http://code.google.com/p/android/issues/detail?id=37577

关于java - API 级别较低的设备上的 Android UnkownHostException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38973479/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com