>我在Android Studio中有一个项目,需要通过Https向服务器发送请愿书以登录并下载一些信息。
当我在平板电脑(Android 8(和手机(Android 9(中运行该应用程序时,它可以完美运行,但是当我在平板电脑(Android 5.1(和手机(Android 6(中运行它时,它会抛出:
java.net.UnknownHostException.
编辑我想我错过了重要信息,这是我目前创建请愿书的方式。
String soapAction = ConstantMethods.URL_BASE + method;
String serverUrl = ConstantMethods.HTTP + url + "?op=" + method;
AsyncHttpClient client = new AsyncHttpClient();
client.setTimeout(20000);
String contentType = "text/xml; charset=utf-8";
StringEntity entity = null;
try {
entity = new StringEntity(body, "utf-8");
entity.setChunked(true);
} catch (IllegalArgumentException e) {
e.printStackTrace();
}
client.addHeader("Content-Type", "text/xml; charset=utf-8");
client.addHeader("SOAPAction", soapAction);
client.post(context, serverUrl.trim(), entity, contentType, new AsyncHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
String xml = "";
try {
xml = new String(responseBody, "UTF-8");
serviceInterface.onStart("SAVING");
databaseAdapter.insertProduct(xml);
serviceInterface.onSuccess("SAVED");
syncImages();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
@Override
public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {
Log.i("DEBUG", "Error while sync " + statusCode + " " + error);
serviceInterface.onFailed("Something has happended during the sync process");
}
});
我已经将权限添加到清单中,并检查它们。
这是我遇到的错误。X是为了安全,但那里有一个IP地址。
04-09 12:44:11.112 10264-10343/www.com.myapplication W/System.err: java.net.UnknownHostException: Unable to resolve host "static-xxx-xxx-xx-xxx.une.net.co": No address associated with hostname
04-09 12:44:11.113 10264-10343/www.com.myapplication W/System.err: at java.net.InetAddress.lookupHostByName(InetAddress.java:434)
04-09 12:44:11.113 10264-10343/www.com.myapplication W/System.err: at java.net.InetAddress.getAllByNameImpl(InetAddress.java:259)
04-09 12:44:11.113 10264-10343/www.com.myapplication W/System.err: at java.net.InetAddress.getByName(InetAddress.java:312)
04-09 12:44:11.113 10264-10343/www.com.myapplication W/System.err: at cz.msebera.android.httpclient.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:154)
04-09 12:44:11.113 10264-10343/www.com.myapplication W/System.err: at cz.msebera.android.httpclient.conn.scheme.SchemeSocketFactoryAdaptor.connectSocket(SchemeSocketFactoryAdaptor.java:65)
04-09 12:44:11.113 10264-10343/www.com.myapplication W/System.err: at cz.msebera.android.httpclient.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:177)
04-09 12:44:11.113 10264-10343/www.com.myapplication W/System.err: at cz.msebera.android.httpclient.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:145)
04-09 12:44:11.113 10264-10343/www.com.myapplication W/System.err: at cz.msebera.android.httpclient.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:131)
04-09 12:44:11.113 10264-10343/www.com.myapplication W/System.err: at cz.msebera.android.httpclient.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:611)
04-09 12:44:11.114 10264-10343/www.com.myapplication W/System.err: at cz.msebera.android.httpclient.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:446)
04-09 12:44:11.114 10264-10343/www.com.myapplication W/System.err: at cz.msebera.android.httpclient.impl.client.AbstractHttpClient.doExecute(AbstractHttpClient.java:860)
04-09 12:44:11.114 10264-10343/www.com.myapplication W/System.err: at cz.msebera.android.httpclient.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82)
04-09 12:44:11.114 10264-10343/www.com.myapplication W/System.err: at com.loopj.android.http.AsyncHttpRequest.makeRequest(AsyncHttpRequest.java:146)
04-09 12:44:11.114 10264-10343/www.com.myapplication W/System.err: at com.loopj.android.http.AsyncHttpRequest.makeRequestWithRetries(AsyncHttpRequest.java:177)
04-09 12:44:11.114 10264-10343/www.com.myapplication W/System.err: at com.loopj.android.http.AsyncHttpRequest.run(AsyncHttpRequest.java:106)
04-09 12:44:11.114 10264-10343/www.com.myapplication W/System.err: at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:422)
04-09 12:44:11.114 10264-10343/www.com.myapplication W/System.err: at java.util.concurrent.FutureTask.run(FutureTask.java:237)
04-09 12:44:11.114 10264-10343/www.com.myapplication W/System.err: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
04-09 12:44:11.114 10264-10343/www.com.myapplication W/System.err: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
04-09 12:44:11.114 10264-10343/www.com.myapplication W/System.err: at java.lang.Thread.run(Thread.java:818)
它目前在限制性更强的操作系统中工作,而不是相反,这似乎很奇怪。任何帮助或指导将不胜感激。
经过大量的调试和测试,发现了可能的问题所在。我正在使用一个 apache 支持库:
useLibrary 'org.apache.http.legacy'
因此,我尝试切换到将请愿书发布到服务器的不同方式,如下所示。
String soapAction = "http://url.com.co/" + method;
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("POST");
connection.setRequestProperty("Content-Type", contentType);
connection.setRequestProperty("SOAPAction", soapAction);
OutputStream reqStream = connection.getOutputStream();
reqStream.write(Body.getBytes());
InputStream resStream = connection.getInputStream();
String res = IOUtils.toString(resStream, StandardCharsets.UTF_8);
Toast.makeText(context, res, Toast.LENGTH_LONG).show();
connection.disconnect();
我不确定这是否是正确的方法,或者这是否是一开始的问题,但它确实有效。