Форум программистов, компьютерный форум, киберфорум
Наши страницы

Программирование Android

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 5.00
olorin3000
2 / 2 / 1
Регистрация: 27.09.2012
Сообщений: 48
#1

Как выводить сообщение об отсутствии соединения с интернетом? - Программирование Android

18.04.2014, 17:20. Просмотров 1852. Ответов 15
Метки нет (Все метки)

Здравствуйте!
У меня в ViewPager загружаются 2 фрагмента.
Каждый фрагмент делает асинхронный запрос,
ответ парсится с помощю JSON.
Вопрос в следующем: как лучше всего выводить меседж об отсутствии соединения с интернетом.
Имеется в виду такую же реализацию как в приложение google play market.
Зарание спасибо)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.04.2014, 17:20
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как выводить сообщение об отсутствии соединения с интернетом? (Программирование Android):

Каким способом вы определяете наличие соединения с интернетом - Программирование Android
Знаю весь интернет кишит примерами... Но вот каким "хорошим", оптимальным решением пользуетесь вы товарищи? Есть ли заложенный...

Как прервать выполнение тестового метода при отсутствии соединения с Интернет - C#
В проекте с юнит-тестами (VS 2010) есть метод, который тестирует некую функцию. Но чтобы ее протестировать, нужно инет-подключение....

Как проверить наличие соединения с Интернетом\Сетью - C++ Builder
Привет всем. :) Вопрос простой и в гугле много ссылок и решений, но то что пробовал, не работает. Я знаю эту функцию...

Как можно узнать текущую скорость соединения с интернетом - C#
Привет. Как можно узнать текущую скорость соединения с интернетом? (Ну и вывести ее, например, в лэйбл.) Имеется ввиду не пропускную...

Проверка соединения с интернетом - Visual Basic .NET
Здравствуйте уважаемые обитатели. Я через свою программу, скачиваю из интернета файл. Все нормально, но вот когда интернет отключен, у...

Проверка соединения с интернетом - C#
Вообщем я тут сидел и думал как проверить интернет, и вот надумал такой простой метод. Он заключаеться в проверке названия страницы. Но у...

15
YuraAAA
1577 / 1318 / 271
Регистрация: 25.10.2009
Сообщений: 3,438
Записей в блоге: 2
18.04.2014, 18:07 #2
olorin3000, вопрос такой. Вам нужно выводить сообщение моментально при отключении? Или же просто проверять непосредственно перед запросом?
0
olorin3000
2 / 2 / 1
Регистрация: 27.09.2012
Сообщений: 48
18.04.2014, 18:13  [ТС] #3
моментально при отключении
0
YuraAAA
1577 / 1318 / 271
Регистрация: 25.10.2009
Сообщений: 3,438
Записей в блоге: 2
18.04.2014, 18:23 #4
olorin3000, хорошо.
1. Описываем callback interface

Java
1
2
3
4
5
6
7
8
9
10
public interface INetworkConnectivityStateCallback {
    enum NetworkTypes {
        DISABLE,
        MOBILE,
        WIFI,
        WIMAX
    }
 
    void OnNetworkStateChange(NetworkTypes type);
}
2. Сам класс-оболочка + ресивер

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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
public class NetworkConnectivityListener {
    private static final String TAG = "NetworkConnectivityListener";
    private static NetworkConnectivityListener instance;
 
    public static NetworkConnectivityListener getInstance() {
        if (instance == null) {
            instance = new NetworkConnectivityListener();
        }
        return instance;
    }
 
    private static Context mContext;
    private static boolean mListening;
    private static List<INetworkConnectivityStateCallback> networkConnectivityStateCallbackList = new ArrayList<INetworkConnectivityStateCallback>();
    private ConnectivityBroadcastReceiver mReceiver;
 
    public static class ConnectivityBroadcastReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();
            if (!action.equals(ConnectivityManager.CONNECTIVITY_ACTION) || !mListening) {
                return;
            }
 
            boolean noConnectivity = intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, false);
            if (noConnectivity) {
                invokeAllCallbacks(DISABLE);
                return;
            }
 
            // Check each connection type
 
            ConnectivityManager cm = (ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE);
            /**
             * WIFI
             */
 
            /** Check the connection **/
            NetworkInfo network = cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
 
            // Make sure the network is available
            if (isNetworkAvailable(network)) {
                invokeAllCallbacks(WIFI);
                return;
            }
 
            /**
             * 2G/3G
             */
            /** Check the connection **/
            network = cm.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
 
            if (isNetworkAvailable(network)) {
                invokeAllCallbacks(MOBILE);
                return;
            }
 
            /**
             * 4G
             */
 
            /** Check the connection **/
            network = cm.getNetworkInfo(ConnectivityManager.TYPE_WIMAX);
 
            // Make sure the network is available
            if (isNetworkAvailable(network)) {
                invokeAllCallbacks(WIMAX);
                return;
            }
 
            invokeAllCallbacks(DISABLE);
 
 
        }
 
        private boolean isNetworkAvailable(NetworkInfo network) {
            return network != null && network.isAvailable() && network.isConnected();
        }
    }
 
    NetworkConnectivityListener() {
        mReceiver = new ConnectivityBroadcastReceiver();
    }
 
    /**
     * Start listening
     */
    public synchronized void startListening() {
        if (!mListening) {
            mContext = TheApplication.getInstance().getApplicationContext();
 
            IntentFilter filter = new IntentFilter();
            filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
            mContext.registerReceiver(mReceiver, filter);
            mListening = true;
        }
    }
 
    /**
     * Stop listening
     */
    public synchronized void stopListening() {
        if (mListening) {
            mContext.unregisterReceiver(mReceiver);
            mContext = null;
            mListening = false;
        }
    }
 
 
    public void addNetworkConnectivityListener(INetworkConnectivityStateCallback callback) {
        if (networkConnectivityStateCallbackList.contains(callback)) {
            Log.d(TAG, "Callback already registered");
        } else {
            networkConnectivityStateCallbackList.add(callback);
        }
    }
 
    public void removeNetworkConnectivityListener(INetworkConnectivityStateCallback callback) {
        if (!networkConnectivityStateCallbackList.contains(callback)) {
            Log.d(TAG, "Callback already unregistered");
        } else {
            networkConnectivityStateCallbackList.remove(callback);
        }
    }
 
    /**
     * Inform all instances of {@link INetworkConnectivityStateCallback} what network was enabled with {@link INetworkConnectivityStateCallback.NetworkTypes} type
     *
     * @param networkType Network connection type
     */
    private static void invokeAllCallbacks(INetworkConnectivityStateCallback.NetworkTypes networkType) {
        for (INetworkConnectivityStateCallback callback : networkConnectivityStateCallbackList) {
            if (callback != null) callback.OnNetworkStateChange(networkType);
        }
    }
 
}
3. Работа с ним:

Java
1
2
3
4
5
6
7
8
9
10
NetworkConnectivityListener listener = NetworkConnectivityListener.getInstance();
        listener.addNetworkConnectivityListener(new INetworkConnectivityStateCallback() {
            @Override
            public void OnNetworkStateChange(NetworkTypes type) {
                if (type == NetworkTypes.DISABLE) {
                    //No internet connection
                }
            }
        });
        listener.startListening();
1
olorin3000
2 / 2 / 1
Регистрация: 27.09.2012
Сообщений: 48
18.04.2014, 18:36  [ТС] #5
Спасибо. Хотел уточнить. А как быть когда ошибка во время запроса?
Получается приложение вылетает. Как не допустить такого?
0
YuraAAA
1577 / 1318 / 271
Регистрация: 25.10.2009
Сообщений: 3,438
Записей в блоге: 2
18.04.2014, 18:41 #6
olorin3000, как это вылетает?
0
olorin3000
2 / 2 / 1
Регистрация: 27.09.2012
Сообщений: 48
18.04.2014, 18:44  [ТС] #7
Ну крашится...
Появляется стандартное сообщение типа exception.
[]http://www.skill-guru.com/blog/wp-content/uploads/2011/01/Android_Logcat-force-close.jpg[/]
0
YuraAAA
1577 / 1318 / 271
Регистрация: 25.10.2009
Сообщений: 3,438
Записей в блоге: 2
18.04.2014, 18:47 #8
olorin3000, дайте стек-трейс, оно не должно падать
0
olorin3000
2 / 2 / 1
Регистрация: 27.09.2012
Сообщений: 48
18.04.2014, 18:52  [ТС] #9
А сори, я затупил)
Получается тот код что вы дали он исключает такую ситуацию?
0
YuraAAA
1577 / 1318 / 271
Регистрация: 25.10.2009
Сообщений: 3,438
Записей в блоге: 2
18.04.2014, 19:08 #10
olorin3000, нет, ни в коем случае. Почему падает - надо разбираться
0
olorin3000
2 / 2 / 1
Регистрация: 27.09.2012
Сообщений: 48
18.04.2014, 19:14  [ТС] #11
Я понял. Спасибо за помощ.
0
YuraAAA
1577 / 1318 / 271
Регистрация: 25.10.2009
Сообщений: 3,438
Записей в блоге: 2
18.04.2014, 19:15 #12
olorin3000, покажите стек трейс, который появляется в LocCat при падении (в IDE)
0
petruchodd
21.04.2014, 15:29
  #13

Не по теме:

Юра. Че то сильно намудрено для обычной проверки :/

0
YuraAAA
1577 / 1318 / 271
Регистрация: 25.10.2009
Сообщений: 3,438
Записей в блоге: 2
21.04.2014, 18:48 #14
petruchodd,
Цитата Сообщение от olorin3000 Посмотреть сообщение
моментально при отключении
какая "обычная" проверка? Это асинхронный ресивер, на минуточку
0
Max_92
25 / 7 / 2
Регистрация: 26.04.2010
Сообщений: 205
21.04.2014, 19:15 #15
как вариант вот:

Java
1
2
3
4
5
6
7
8
9
public boolean isOnline() { 
            ConnectivityManager cm = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
            NetworkInfo nInfo = cm.getActiveNetworkInfo(); 
            if (nInfo != null && nInfo.isConnected()) {
                return true; 
            } else { 
                return false;
            }
         }
0
21.04.2014, 19:15
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.04.2014, 19:15
Привет! Вот еще темы с ответами:

Проверка соединения с интернетом - C++ Builder FireMonkey
Вот уж не думал, что буду задавать такой вопрос: Как проверить соединение с интернетом? RAD Studio XE6 C++ Builder, FireMonkey Mobile...

Проверка соединения с интернетом - Delphi
Нужен самый простой код, проверки соединения с интернетом. Перерыл кучу примеров, но ничего не работает.

Разрыв соединения с интернетом - Windows 8, 8.1
Уважаемые! Подскажите, плиззз... Постоянно разрывается соединение с интернетом. Дольше 15 мин. не работает. У меня высокоскоростное...

Проверка соединения с интернетом - C++ Builder
Будет ли исправно работать этот способ на всех компьютерах? На форме компонент Powersock из вкладки FastNet И следующий код: ...


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

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

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