Петиция SOAP через Https работает в Android 8 | 9, но не в Andorid 5 | 6 - PullRequest
0 голосов
/ 09 апреля 2019

У меня есть проект в 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)

Кажется странным, что в настоящее время он работает вболее ограниченная ОС, а не наоборот.Любая помощь или руководство будут оценены.

1 Ответ

0 голосов
/ 10 апреля 2019

После долгих отладок и испытаний выяснилось, в чем может быть проблема. Я использовал библиотеку поддержки для 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();

Я не знаю точно, является ли это правильным способом, или это была проблема с самого начала, но это точно работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...