Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Nikandra94
0 / 0 / 0
Регистрация: 11.05.2016
Сообщений: 16
#1

Проверка соединения с сайтом через HttpUrlConnection - Программирование Android

19.05.2016, 20:37. Просмотров 895. Ответов 19
Метки нет (Все метки)

я нашла кучу информации, где после подключения что-либо выдает. Как написать программный код, чтоб выдавало только удалось подсоединиться или нет?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.05.2016, 20:37
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Проверка соединения с сайтом через HttpUrlConnection (Программирование Android):

Проверка качества соединения с сайтом
Иногда приложение падает при коннекте к сайту. Причем происходит это только на...

Как отправить данные json через HttpURLConnection
Здравствуйте! Мне нужно работать с АПИ из приложения. Использую...

Проверка интернет соединения
Добрый день , я хотел бы проверить интернет соединение , у меня уже есть...

Проверка интернет соединения
Как же всё-таки прописать грамотную проверку интернет соединения? Необходимо...

Проверка Socket на наличие соединения
Помогите сделать проверку сокета перед подключением. public void...

Проверка наличия интернет соединения
Если в public void onStart() { super.onStart(); } ...

19
DarkVortex
103 / 69 / 19
Регистрация: 07.07.2014
Сообщений: 240
19.05.2016, 21:06 #2
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    public boolean CheckHost(String host){
        HttpURLConnection connection;
        try {
            connection = (HttpURLConnection) new URL(host).openConnection();
            connection.setRequestProperty("Accept-Encoding", "");
            connection.setRequestMethod("HEAD");
            int responseCode = connection.getResponseCode();
            if (responseCode != 200) {
                return false;
            }
        } catch (Exception e) {
            return false;
        }
        return true;
    }
Я так делаю.
1
YuraAAA
1578 / 1319 / 282
Регистрация: 25.10.2009
Сообщений: 3,436
Записей в блоге: 2
19.05.2016, 21:25 #3
DarkVortex, чуть подчищу Ваш код

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public boolean checkHost(String host) {
        HttpURLConnection connection = null;
        try {
            connection = (HttpURLConnection) new URL(host).openConnection();
            connection.setRequestProperty("Accept-Encoding", "");
            connection.setRequestMethod("HEAD");
            return connection.getResponseCode() == HttpURLConnection.HTTP_OK;
        } catch (Exception e) {
            return false;
        } finally {
            releaseResource(connection);
        }
    }
 
    private void releaseResource(HttpURLConnection connection) {
        if (connection != null) {
            connection.disconnect();
        }
    }
1
DarkVortex
103 / 69 / 19
Регистрация: 07.07.2014
Сообщений: 240
19.05.2016, 21:39 #4
YuraAAA, никогда не против) просто использовал для своего сервера и ответ 200 меня устраивал)
1
YuraAAA
1578 / 1319 / 282
Регистрация: 25.10.2009
Сообщений: 3,436
Записей в блоге: 2
19.05.2016, 21:47 #5
DarkVortex, у Вас connection не был закрыт Да и лучше вместо "200" использовать константу
1
DarkVortex
103 / 69 / 19
Регистрация: 07.07.2014
Сообщений: 240
19.05.2016, 22:28 #6
YuraAAA, а чем 200 не константа?)
1
Nikandra94
0 / 0 / 0
Регистрация: 11.05.2016
Сообщений: 16
19.05.2016, 22:40  [ТС] #7
YuraAAA, DarkVortex, Спасибо вам огромное, вы спасли меня)))
0
Hank
63 / 54 / 4
Регистрация: 28.12.2011
Сообщений: 297
19.05.2016, 22:56 #8
Цитата Сообщение от DarkVortex Посмотреть сообщение
а чем 200 не константа?)
а если завтра это значение будет не 200 (в данном контексте маловероятно)? будет все приложения править?
1
Nikandra94
0 / 0 / 0
Регистрация: 11.05.2016
Сообщений: 16
19.05.2016, 23:15  [ТС] #9
YuraAAA, что-то у меня постоянно false вылетает...
0
YuraAAA
1578 / 1319 / 282
Регистрация: 25.10.2009
Сообщений: 3,436
Записей в блоге: 2
19.05.2016, 23:36 #10
Nikandra94, покажите, как Вы его вызываете? Permission на INTERNET есть в манифесте?

Java
1
2
3
} catch (Exception e) {
      return false;
}
поменяйте на

Java
1
2
3
4
} catch (Exception e) {
      e.printStackTrace();
      return false;
}
1
Nikandra94
0 / 0 / 0
Регистрация: 11.05.2016
Сообщений: 16
19.05.2016, 23:39  [ТС] #11
YuraAAA, так или что-то напутала?
k= CheckHost("https://www.google.ru");
0
DarkVortex
103 / 69 / 19
Регистрация: 07.07.2014
Сообщений: 240
19.05.2016, 23:43 #12
Hank, ну тогда видимо сломается весь интернет) в HttpURLConnection.HTTP_OK ведь никто ничего не поменяет

Добавлено через 1 минуту
Nikandra94, k= CheckHost("http://www.google.ru");
1
YuraAAA
1578 / 1319 / 282
Регистрация: 25.10.2009
Сообщений: 3,436
Записей в блоге: 2
19.05.2016, 23:45 #13
Хм, не, должно быть нормально всё.
Bash
1
2
3
$ curl -X HEAD [url]https://www.google.ru[/url] -I -H 'Accept-Encoding:'
HTTP/1.1 200 OK
Date: Thu, 19 May 2016 20:43:28 GMT
Манифест покажите и добавьте e.printStackTrace() внутрь catch блока.

DarkVortex, использование готовых констант это правило хорошего тона Если другой программист посмотрит Ваш код, для него это, возможно, будет не очень понятно, что же такое это "200". А HTTP_OK более понятно
1
Nikandra94
0 / 0 / 0
Регистрация: 11.05.2016
Сообщений: 16
19.05.2016, 23:56  [ТС] #14
вот,YuraAAA
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.remof">
    <uses-permission android:name="android.permission.INTERNET"/>
 
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".Pro">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
 
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".result"
            android:label="@string/title_activity_result"
            android:theme="@style/AppTheme.NoActionBar" />
        <activity
            android:name=".anti"
            android:label="@string/title_activity_anti"
            android:theme="@style/AppTheme.NoActionBar" />
        <activity
            android:name=".notFireWall"
            android:label="@string/title_activity_not_fire_wall"
            android:theme="@style/AppTheme.NoActionBar" />
        <activity
            android:name=".notanti"
            android:label="@string/title_activity_notanti"
            android:theme="@style/AppTheme.NoActionBar" />
        <activity
            android:name=".Drugie"
            android:label="@string/title_activity_drugie"
            android:theme="@style/AppTheme.NoActionBar" />
        <activity
            android:name=".Branmayer"
            android:label="@string/title_activity_branmayer"
            android:theme="@style/AppTheme.NoActionBar"></activity>
    </application>
 
</manifest>
0
YuraAAA
1578 / 1319 / 282
Регистрация: 25.10.2009
Сообщений: 3,436
Записей в блоге: 2
20.05.2016, 00:26 #15
Nikandra94, ещё раз
1. добавьте e.printStackTrace() перед return false;
2.
Цитата Сообщение от YuraAAA Посмотреть сообщение
return connection.getResponseCode() == HttpURLConnection.HTTP_OK;
меняйте на
Java
1
2
3
int code = connection.getResponseCode();
Log.d("HttpUrlConnection", "" + code);
return code == HttpURLConnection.HTTP_OK;
и запустите снова. Будут ли ошибки в трейсе, какой будет код в логах
1
Nikandra94
0 / 0 / 0
Регистрация: 11.05.2016
Сообщений: 16
20.05.2016, 00:53  [ТС] #16
YuraAAA, это вызов этого метода
05-20 05:53:35.742 23190-23190/com.example.myapplication W/System.err: android.os.NetworkOnMainThreadException
05-20 05:53:35.742 23190-23190/com.example.myapplication W/System.err: at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1117)
05-20 05:53:35.742 23190-23190/com.example.myapplication W/System.err: at java.net.InetAddress.lookupHostByName(InetAddress.java:385)
05-20 05:53:35.742 23190-23190/com.example.myapplication W/System.err: at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)
05-20 05:53:35.742 23190-23190/com.example.myapplication W/System.err: at java.net.InetAddress.getAllByName(InetAddress.java:214)
05-20 05:53:35.742 23190-23190/com.example.myapplication W/System.err: at libcore.net.http.HttpConnection.<init>(HttpConnection.java:70)
05-20 05:53:35.746 23190-23190/com.example.myapplication W/System.err: at libcore.net.http.HttpConnection.<init>(HttpConnection.java:50)
05-20 05:53:35.746 23190-23190/com.example.myapplication W/System.err: at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:340)
05-20 05:53:35.746 23190-23190/com.example.myapplication W/System.err: at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:87)
05-20 05:53:35.746 23190-23190/com.example.myapplication W/System.err: at libcore.net.http.HttpConnection.connect(HttpConnection.java:128)
05-20 05:53:35.746 23190-23190/com.example.myapplication W/System.err: at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:316)
05-20 05:53:35.746 23190-23190/com.example.myapplication W/System.err: at libcore.net.http.HttpEngine.connect(HttpEngine.java:311)
05-20 05:53:35.746 23190-23190/com.example.myapplication W/System.err: at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:290)
05-20 05:53:35.746 23190-23190/com.example.myapplication W/System.err: at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:240)
05-20 05:53:35.746 23190-23190/com.example.myapplication W/System.err: at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:282)
05-20 05:53:35.746 23190-23190/com.example.myapplication W/System.err: at libcore.net.http.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:495)
05-20 05:53:35.746 23190-23190/com.example.myapplication W/System.err: at com.example.myapplication.MainActivity.CheckHost(MainActivity.java:53)
05-20 05:53:35.746 23190-23190/com.example.myapplication W/System.err: at com.example.myapplication.MainActivity$1.onClick(MainActivity.java:30)
05-20 05:53:35.746 23190-23190/com.example.myapplication W/System.err: at android.view.View.performClick(View.java:4204)
05-20 05:53:35.746 23190-23190/com.example.myapplication W/System.err: at android.view.View$PerformClick.run(View.java:17355)
05-20 05:53:35.746 23190-23190/com.example.myapplication W/System.err: at android.os.Handler.handleCallback(Handler.java:725)
05-20 05:53:35.746 23190-23190/com.example.myapplication W/System.err: at android.os.Handler.dispatchMessage(Handler.java:92)
05-20 05:53:35.746 23190-23190/com.example.myapplication W/System.err: at android.os.Looper.loop(Looper.java:137)
05-20 05:53:35.746 23190-23190/com.example.myapplication W/System.err: at android.app.ActivityThread.main(ActivityThread.java:5069)
05-20 05:53:35.746 23190-23190/com.example.myapplication W/System.err: at java.lang.reflect.Method.invokeNative(Native Method)
05-20 05:53:35.746 23190-23190/com.example.myapplication W/System.err: at java.lang.reflect.Method.invoke(Method.java:511)
05-20 05:53:35.746 23190-23190/com.example.myapplication W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
05-20 05:53:35.746 23190-23190/com.example.myapplication W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
05-20 05:53:35.746 23190-23190/com.example.myapplication W/System.err: at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:132)
05-20 05:53:35.746 23190-23190/com.example.myapplication W/System.err: at dalvik.system.NativeStart.main(Native Method)
0
Hank
63 / 54 / 4
Регистрация: 28.12.2011
Сообщений: 297
20.05.2016, 01:00 #17
странно, что сразу не указали эту причину - все действия с сетью не должны производиться в потоке пользовательского интерфейса.
1
Nikandra94
0 / 0 / 0
Регистрация: 11.05.2016
Сообщений: 16
20.05.2016, 01:03  [ТС] #18
Hank, и что делать?
0
Hank
63 / 54 / 4
Регистрация: 28.12.2011
Сообщений: 297
20.05.2016, 01:10 #19
Нужно создать фоновый поток, например, так:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
new AsyncTask<Void, Void, Boolean>() {
            @Override
            protected Boolean doInBackground(Void... params) {
                k= CheckHost("https://www.google.ru");
                return k;
            }
 
 
            @Override
            protected void onPostExecute(Boolean k) {
                super.onPostExecute(k);
//k - это результат
            }
        }.execute();
1
Nikandra94
0 / 0 / 0
Регистрация: 11.05.2016
Сообщений: 16
20.05.2016, 01:40  [ТС] #20
Hank, YuraAAA, Спасибо большое всем и что вы меня поняли и вытерпели, мой проект теперь полностью работает. Спасибо еще раз.
0
20.05.2016, 01:40
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.05.2016, 01:40
Привет! Вот еще темы с решениями:

HttpUrlConnection
Всем привет, не могу разобраться с HttpUrlConnection, написал код по...

HttpURLConnection, ошибка
Пытаюсь получить данную xml из инета: http://katolik.ru/mir.feed?type=rss ...

Использование HttpURLConnection
Всем привет. замечаю странное поведение коннекта к локальному серваку - который...

HttpURLConnection запрос
Делаю запрос на сервер public class AsyncTaskc extends AsyncTask&lt;Void,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru