Форум программистов, компьютерный форум CyberForum.ru

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

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

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

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

Здравствуйте!
У меня в ViewPager загружаются 2 фрагмента.
Каждый фрагмент делает асинхронный запрос,
ответ парсится с помощю JSON.
Вопрос в следующем: как лучше всего выводить меседж об отсутствии соединения с интернетом.
Имеется в виду такую же реализацию как в приложение google play market.
Зарание спасибо)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.04.2014, 17:20     Как выводить сообщение об отсутствии соединения с интернетом?
Посмотрите здесь:
Каким способом вы определяете наличие соединения с интернетом Android
Android Как скорость соединения зависит от скорости интернета?
Android Как выводить текст используя ListView
Android Как сделать лог интернет соединения Android приложения
Android Как заставить setText(); выводить строку а не ее название?
Как заставить виджет выводить информацию из файла по времени? Android
Android Как сделать, чтобы приложение запускалось только при налиции WiFi соединения?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
YuraAAA
1566 / 1308 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
18.04.2014, 18:07     Как выводить сообщение об отсутствии соединения с интернетом? #2
olorin3000, вопрос такой. Вам нужно выводить сообщение моментально при отключении? Или же просто проверять непосредственно перед запросом?
olorin3000
2 / 2 / 1
Регистрация: 27.09.2012
Сообщений: 48
18.04.2014, 18:13  [ТС]     Как выводить сообщение об отсутствии соединения с интернетом? #3
моментально при отключении
YuraAAA
1566 / 1308 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 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();
olorin3000
2 / 2 / 1
Регистрация: 27.09.2012
Сообщений: 48
18.04.2014, 18:36  [ТС]     Как выводить сообщение об отсутствии соединения с интернетом? #5
Спасибо. Хотел уточнить. А как быть когда ошибка во время запроса?
Получается приложение вылетает. Как не допустить такого?
YuraAAA
1566 / 1308 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
18.04.2014, 18:41     Как выводить сообщение об отсутствии соединения с интернетом? #6
olorin3000, как это вылетает?
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[/]
YuraAAA
1566 / 1308 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
18.04.2014, 18:47     Как выводить сообщение об отсутствии соединения с интернетом? #8
olorin3000, дайте стек-трейс, оно не должно падать
olorin3000
2 / 2 / 1
Регистрация: 27.09.2012
Сообщений: 48
18.04.2014, 18:52  [ТС]     Как выводить сообщение об отсутствии соединения с интернетом? #9
А сори, я затупил)
Получается тот код что вы дали он исключает такую ситуацию?
YuraAAA
1566 / 1308 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
18.04.2014, 19:08     Как выводить сообщение об отсутствии соединения с интернетом? #10
olorin3000, нет, ни в коем случае. Почему падает - надо разбираться
olorin3000
2 / 2 / 1
Регистрация: 27.09.2012
Сообщений: 48
18.04.2014, 19:14  [ТС]     Как выводить сообщение об отсутствии соединения с интернетом? #11
Я понял. Спасибо за помощ.
YuraAAA
1566 / 1308 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
18.04.2014, 19:15     Как выводить сообщение об отсутствии соединения с интернетом? #12
olorin3000, покажите стек трейс, который появляется в LocCat при падении (в IDE)
petruchodd
21.04.2014, 15:29
  #13

Не по теме:

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

YuraAAA
1566 / 1308 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
21.04.2014, 18:48     Как выводить сообщение об отсутствии соединения с интернетом? #14
petruchodd,
Цитата Сообщение от olorin3000 Посмотреть сообщение
моментально при отключении
какая "обычная" проверка? Это асинхронный ресивер, на минуточку
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;
            }
         }
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.04.2014, 20:12     Как выводить сообщение об отсутствии соединения с интернетом?
Еще ссылки по теме:
Android Как в Android Studio по нажатию кнопки выводить свой текст в TextView?
Как по нажатию кнопки несколько раз выводить текст в TextView в Android Studio? Android
Работа библиотеки Retrofit при отсутствии подключения к интернету Android
Обработка перехода по ссылке на skype при его отсутствии Android
Android Автоматическое управление 2G интернетом

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

Или воспользуйтесь поиском по форуму:
YuraAAA
1566 / 1308 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
21.04.2014, 20:12     Как выводить сообщение об отсутствии соединения с интернетом? #16
Max_92, ну тогда уже

Java
1
2
3
4
5
public boolean isOnline() { 
            ConnectivityManager cm = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
            NetworkInfo nInfo = cm.getActiveNetworkInfo(); 
            return nInfo != null && nInfo.isConnected();
         }
Yandex
Объявления
21.04.2014, 20:12     Как выводить сообщение об отсутствии соединения с интернетом?
Ответ Создать тему
Опции темы

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