Https 上的 SOAP 请愿在 Android 8|9 中有效,但在 Andorid 5|6 中不起作用



>我在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();

我不确定这是否是正确的方法,或者这是否是一开始的问题,但它确实有效。

相关内容

最新更新