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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.77
Kroshandowski
2 / 2 / 0
Регистрация: 05.04.2013
Сообщений: 234
#1

Как правильно вставить AlertDialog, если нет интернета? - Программирование Android

20.01.2015, 22:19. Просмотров 2157. Ответов 42
Метки нет (Все метки)

Здравствуйте!Как правильно вставить AlertDialog если нет интернета?
Т.е. я через webView (wv) гружу сайт и если есть инет,то все идет дальше и в wv грузится сайт. Если жк инет нет вылетает AlertDialog о том,что нужно включить инет и обновить страницу.

Я пробовал вот так,но у меня диалог на диалог лезет...даже если например инет включен,то AlertDialog лезет на ProgressDialog.

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
 webview = (WebView) findViewById(R.id.webView);
        webview.getSettings().setJavaScriptEnabled(true);
        webview.setWebViewClient(new WebViewClient() {
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                view.loadUrl(url);
                return true;
            }
            public void onLoadResource (WebView view, String url) {
                if (mProgressDialog == null) {
                    mProgressDialog = new ProgressDialog(Second.this);
                    mProgressDialog.setTitle("Открываем сайт");
                    mProgressDialog.setMessage("Пожалуйста подождите...");
                    mProgressDialog.show();
                }  else {
                    AlertDialog alertDialog = new AlertDialog.Builder(Second.this).create();
                    alertDialog.setTitle("Нет доступа в интернет!");
                    alertDialog.setMessage("Включите моб.данные и нажмите кнопку обновить);
                    alertDialog.setButton("OK", new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int which) {
                            dialog.cancel();
                        }
                    });
                    alertDialog.show();
                }
            }
            public void onPageFinished(WebView view, String url) {
                if (mProgressDialog.isShowing()) {
                    mProgressDialog.dismiss();
                    mProgressDialog = null;
                }
            }
        });
        webview.loadUrl("http://google.ru");
    }
Заранее спасибо.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.01.2015, 22:19
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Как правильно вставить AlertDialog, если нет интернета? (Программирование Android):

Как правильно определить IP устройства, которое заходит с мобильного интернета - Программирование
Беда просто нереальная: чел пользуется мобильным нетом, живёт в Ростове - там у него на выходе IP №1, заходит на сайт - там у него уже IP...

Как сделать такое AlertDialog - Программирование Android
Помогите сделать вот такой AlertDialog или (не знаю что они использовали). Работает так нажимаещ ImageButton открываеться такое типа...

Как сделать AlertDialog со списком с цветными строками? - Программирование Android
Вопрос новичка. Собственно subj. Есть список из десятка ЦВЕТОВ, которые нужно выбирать из списка. Из выпадающего списка или по нажатию...

Как менять message AlertDialog в зависимости от progress SeekBar? - Программирование Android
Доброго времени суток) В моём приложении при нажатии на TextVeiw появляется AlertDialog, в который я всунул SeekBar. Нужно, чтобы message...

Загрузка картинок Picasso из дискового кэша, когда нет интернета - Программирование Android
Подскажите как можно при помощи Picasso реализовать загрузку картинок в фон активити, когда нет интернета? public class MainActivity...

Как установить лицензионный Metro 2033, если нет интернета? - Action/FPS игры
Привет всем! Я живу в сельской северной местности, где интернет только в школе и на почте (спутниковый), а сотовой связи вообще нет (да,...

42
Armagedo
209 / 209 / 60
Регистрация: 22.08.2014
Сообщений: 644
20.01.2015, 23:02 #2
Странно проверять наличие доступа в "интернет" по инициализации mProgressDialog...

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
public static boolean isConnected(Context context) {
        ConnectivityManager cm = (ConnectivityManager) context
                .getSystemService(Context.CONNECTIVITY_SERVICE);
 
        NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
        if (activeNetwork != null && activeNetwork.isConnected()) {
            try {
                URL url = new URL("http://www.google.com/");
                HttpURLConnection urlc = (HttpURLConnection) url
                        .openConnection();
                urlc.setRequestProperty("User-Agent", "test");
                urlc.setRequestProperty("Connection", "close");
                urlc.setConnectTimeout(1000); // mTimeout is in seconds
                urlc.connect();
                if (urlc.getResponseCode() == 200) {
                    Toast.makeText(context, "Internet connection is Ok",
                    Toast.LENGTH_SHORT).show();
                    return true;
                } else {
                    Toast.makeText(context,
                    "Please, check your internet connection",
                    Toast.LENGTH_SHORT).show();
                    return false;
                }
            } catch (IOException e) {
                Toast.makeText(context, "Warning" + "\n"+
                "Error checking internet connection \n"+
                 e.toString(), Toast.LENGTH_SHORT).show();
                return false;
            }
        } else {
            Toast.makeText(context, "Check your network connection",
                    Toast.LENGTH_SHORT).show();
            return false;
        }
    }
Добавлено через 3 минуты
О..еще ж разрешение в манифест надо добавить тогда

XML
1
2
<uses-permission
            android:name="android.permission.ACCESS_NETWORK_STATE"/>
(с)пёрто где-то когда-то с stackoverflow...
0
Kroshandowski
2 / 2 / 0
Регистрация: 05.04.2013
Сообщений: 234
21.01.2015, 00:29  [ТС] #3
Armagedo, Спасибо,но я не совсем понимаю как совместить эти два примера. К примеру если я уберу кусок AlertDialog из прогресса,то все идет как надо. И теперь нужно впихнуть кусок проверки инета из вашего кода и прикрутить к этому сообщение (можно и Toast,но лучше Alert) о том, что сайт не загрузился по причине отсутствия инета.
0
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,072
21.01.2015, 08:40 #4
Цитата Сообщение от Kroshandowski Посмотреть сообщение
AlertDialog лезет на ProgressDialog
Выключайте ProgressDialog через progressDialog.dismiss();
0
CoolMind
421 / 404 / 65
Регистрация: 06.10.2012
Сообщений: 1,733
21.01.2015, 09:32 #5
Kroshandowski, я бы весь подход поменял. Написал бы проверку на наличие подключения, она выполняется мгновенно. Если подключения нет, дальше можно не грузить.
Дальше изучил бы AsyncTask, применил бы его. Затем во время загрузки рисовал бы progressDialog. По окончании убирал бы его и, может быть, выводил бы сообщение.
0
Armagedo
209 / 209 / 60
Регистрация: 22.08.2014
Сообщений: 644
21.01.2015, 10:02 #6
Kroshandowski, в принципе CoolMind расписал всё как оно должно быть.

Цитата Сообщение от Kroshandowski Посмотреть сообщение
Спасибо,но я не совсем понимаю как совместить эти два примера
Так, а что непонятно?
Вместо проверки существует ли mProgressDialog проверяйте существует ли подключение к интернет в принципе

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public void onLoadResource (WebView view, String url) {
                if (isConnected()) {
                    mProgressDialog = new ProgressDialog(Second.this);
                    mProgressDialog.setTitle("Открываем сайт");
                    mProgressDialog.setMessage("Пожалуйста подождите...");
                    mProgressDialog.show();
                }  else {
                    AlertDialog alertDialog = new AlertDialog.Builder(Second.this).create();
                    alertDialog.setTitle("Нет доступа в интернет!");
                    alertDialog.setMessage("Включите моб.данные и нажмите кнопку обновить");
                    alertDialog.setButton("OK", new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int which) {
                            dialog.cancel();
                        }
                    });
                    alertDialog.show();
                }
            }
0
Kroshandowski
2 / 2 / 0
Регистрация: 05.04.2013
Сообщений: 234
21.01.2015, 19:14  [ТС] #7
CoolMind,Armagedo я где-то читал..по-моему на stackoverflow такой коммент (там чувак хотел сделать Asynctask в webview)
Don't use AsyncTask, as you are not in charge of loading the webview. If you want to show a progress dialog, here is how to do it.
И мало где можно найти примеры c AsyncTask...многие примеры содержат методы:
shouldOverrideUrlLoading
onLoadResource
onPageFinished

Может я чего-то не понимаю и это вполне легко сделать для тех,кто это уже полностью освоил или применял в своих приложениях.
Если идти по-порядку и собирать приложение по кускам вместе с вами,то думаю я получу,что изначально задумывалось.
Итак все возможные разрешения в манифесте уже есть.
Далее код который идет в onCreate:
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
@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.second);
        
        webview = (WebView) findViewById(R.id.webView);
        webview.getSettings().setJavaScriptEnabled(true);
        webview.setWebViewClient(new WebViewClient() {
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                view.loadUrl(url);
                return true;
            }
            public void onLoadResource (WebView view, String url) {
                if (mProgressDialog == null) {
                    mProgressDialog = new ProgressDialog(Second.this);
                    mProgressDialog.setTitle("Открываем сайт");
                    mProgressDialog.setMessage("Пожалуйста подождите...");
                    mProgressDialog.show();
                }
            }
            public void onPageFinished(WebView view, String url) {
                if (mProgressDialog.isShowing()) {
                    mProgressDialog.dismiss();
                    mProgressDialog = null;
                }
            }
        });
        webview.loadUrl("file:///android_asset/index.html");
    }
Т.е. данный код подразумевает открытие html файла (да,для загрузки данного файла нужен инет) в независимости от того есть интернет или нет.
Как предлагал Armagedo и CoolMind можно сделать проверку на определение инета еще ДО загрузки всего контента.
Переписываем onLoadResource:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public void onLoadResource (WebView view, String url) {
                if (isConnected()) {
                    mProgressDialog = new ProgressDialog(Second.this);
                    mProgressDialog.setTitle("Открываем сайт");
                    mProgressDialog.setMessage("Пожалуйста подождите...");
                    mProgressDialog.show();
                }  else {
                    AlertDialog alertDialog = new AlertDialog.Builder(Second.this).create();
                    alertDialog.setTitle("Нет доступа в интернет!");
                    alertDialog.setMessage("Включите моб.данные и нажмите кнопку обновить");
                    alertDialog.setButton("OK", new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int which) {
                            dialog.cancel();
                        }
                    });
                    alertDialog.show();
                }
            }
Получается isConnected определяет включен ли инет.
Теперь сам метод isConnected. В каком месте он должен быть?В самом низу или внутри кода?
И что должно находится в методе public static boolean isConnected(Context context)?
Вроде бы все написал,в чем были вопросы.
0
Armagedo
209 / 209 / 60
Регистрация: 22.08.2014
Сообщений: 644
21.01.2015, 20:11 #8
Цитата Сообщение от Kroshandowski Посмотреть сообщение
CoolMind,Armagedo я где-то читал..по-моему на stackoverflow такой коммент (там чувак хотел сделать Asynctask в webview)
Don't use AsyncTask, as you are not in charge of loading the webview. If you want to show a progress dialog, here is how to do it.
... даже как бы и логично...

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
@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.second);
        
        webview = (WebView) findViewById(R.id.webView);
        webview.getSettings().setJavaScriptEnabled(true);
        webview.setWebViewClient(new WebViewClient() {
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                view.loadUrl(url);
                return true;
            }
            public void onLoadResource (WebView view, String url) {
                if ( isConnected(Second.this)) {
                    mProgressDialog = new ProgressDialog(Second.this);
                    mProgressDialog.setTitle("Открываем сайт");
                    mProgressDialog.setMessage("Пожалуйста подождите...");
                    mProgressDialog.show();
                }
            }
            public void onPageFinished(WebView view, String url) {
                if (mProgressDialog.isShowing()) {
                    mProgressDialog.dismiss();
                    mProgressDialog = null;
                }
            }
        });
        webview.loadUrl("file:///android_asset/index.html");
    }
 
public static boolean isConnected(Context context) {
        ConnectivityManager cm = (ConnectivityManager) context
                .getSystemService(Context.CONNECTIVITY_SERVICE);
 
        NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
        if (activeNetwork != null && activeNetwork.isConnected()) {
            try {
                URL url = new URL("http://www.google.com/");
                HttpURLConnection urlc = (HttpURLConnection) url
                        .openConnection();
                urlc.setRequestProperty("User-Agent", "test");
                urlc.setRequestProperty("Connection", "close");
                urlc.setConnectTimeout(1000); // mTimeout is in seconds
                urlc.connect();
                if (urlc.getResponseCode() == 200) {
                    Toast.makeText(context, "Internet connection is Ok",
                    Toast.LENGTH_SHORT).show();
                    return true;
                } else {
                    Toast.makeText(context,
                    "Please, check your internet connection",
                    Toast.LENGTH_SHORT).show();
                    return false;
                }
            } catch (IOException e) {
                Toast.makeText(context, "Warning" + "\n"+
                "Error checking internet connection \n"+
                 e.toString(), Toast.LENGTH_SHORT).show();
                return false;
            }
        } else {
            Toast.makeText(context, "Check your network connection",
                    Toast.LENGTH_SHORT).show();
            return false;
        }
    }
0
CoolMind
421 / 404 / 65
Регистрация: 06.10.2012
Сообщений: 1,733
21.01.2015, 20:48 #9
Kroshandowski, согласен, тут я дал маху, забыл, что речь только о WebView.
Я имел в виду несколько другой метод для определения подключения, чем указал Armagedo, у меня в программе проверяется только подключение к Wi-Fi или сотовым сетям (без проверки наличия там Интернета). Пытался в своё время сделать нормальную проверку на наличие Интернета, выставлял таймаут, но это можно делать только в фоновом потоке.
0
Kroshandowski
2 / 2 / 0
Регистрация: 05.04.2013
Сообщений: 234
21.01.2015, 20:55  [ТС] #10
Armagedo, в итоге полный код выглядит вот так:
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
@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.second);
        webview = (WebView) findViewById(R.id.webView);
        webview.getSettings().setJavaScriptEnabled(true);
        webview.setWebViewClient(new WebViewClient() {
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                view.loadUrl(url);
                return true;
            }
            public void onLoadResource (WebView view, String url) {
                if ( isConnected(Second.this)) {
                    mProgressDialog = new ProgressDialog(Second.this);
                    mProgressDialog.setTitle("Открываем сайт");
                    mProgressDialog.setMessage("Пожалуйста подождите...");
                    mProgressDialog.show();
                }   else {
                    AlertDialog alertDialog = new AlertDialog.Builder(Second.this).create();
                    alertDialog.setTitle("Нет доступа в интернет!");
                    alertDialog.setMessage("Включите моб.данные и нажмите кнопку обновить");
                    alertDialog.setButton("OK", new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int which) {
                            dialog.cancel();
                        }
                    });
                    alertDialog.show();
                }
            }
            public void onPageFinished(WebView view, String url) {
                if (mProgressDialog.isShowing()) {
                    mProgressDialog.dismiss();
                    mProgressDialog = null;
                }
            }
        });
        webview.loadUrl("file:///android_asset/index.html");
    }
 
    public static boolean isConnected(Context context) {
        ConnectivityManager cm = (ConnectivityManager) context
                .getSystemService(Context.CONNECTIVITY_SERVICE);
 
        NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
        if (activeNetwork != null && activeNetwork.isConnected()) {
            try {
                URL url = new URL("http://www.google.com/");
                HttpURLConnection urlc = (HttpURLConnection) url
                        .openConnection();
                urlc.setRequestProperty("User-Agent", "test");
                urlc.setRequestProperty("Connection", "close");
                urlc.setConnectTimeout(1000); // mTimeout is in seconds
                urlc.connect();
                if (urlc.getResponseCode() == 200) {
                    Toast.makeText(context, "Internet connection is Ok",
                            Toast.LENGTH_SHORT).show();
                    return true;
                } else {
                    Toast.makeText(context,
                            "Please, check your internet connection",
                            Toast.LENGTH_SHORT).show();
                    return false;
                }
            } catch (IOException e) {
                Toast.makeText(context, "Warning" + "\n"+
                        "Error checking internet connection \n"+
                        e.toString(), Toast.LENGTH_SHORT).show();
                return false;
            }
        } else {
            Toast.makeText(context, "Check your network connection",
                    Toast.LENGTH_SHORT).show();
            return false;
        }
    }
Но когда я запускаю Second активити,то приложение вылетает и Logcat пишет:
01-21 17:50:08.324: ERROR/AndroidRuntime(742): FATAL EXCEPTION: main
java.lang.NullPointerException
at com.example.pimpim.Second$1.onPageFinished(Second.java:82)
at android.webkit.CallbackProxy.handleMessage(CallbackProxy.java:274)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:130)
at android.app.ActivityThread.main(ActivityThread.java:3683)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
at dalvik.system.NativeStart.main(Native Method)
0
Armagedo
209 / 209 / 60
Регистрация: 22.08.2014
Сообщений: 644
21.01.2015, 21:17 #11
Ну, возьмите контекст у WebView

Java
1
if ( isConnected(view.getContext()))
0
Kroshandowski
2 / 2 / 0
Регистрация: 05.04.2013
Сообщений: 234
21.01.2015, 21:39  [ТС] #12
Armagedo, все равно приложение вылетает и та же ошибка в Logcat(((
0
Armagedo
209 / 209 / 60
Регистрация: 22.08.2014
Сообщений: 644
21.01.2015, 21:46 #13
Давайте сюда код для onPageFinished
0
Kroshandowski
2 / 2 / 0
Регистрация: 05.04.2013
Сообщений: 234
21.01.2015, 21:51  [ТС] #14
Armagedo,
Java
1
2
3
4
5
6
 public void onPageFinished(WebView view, String url) {
                if (mProgressDialog.isShowing()) {
                    mProgressDialog.dismiss();
                    mProgressDialog = null;
                }
            }
0
Armagedo
209 / 209 / 60
Регистрация: 22.08.2014
Сообщений: 644
21.01.2015, 21:56 #15
Аааааа, пилятъ, не увидел...

А так?

Java
1
2
3
4
5
public void onPageFinished(WebView view, String url) {
                if ((mProgressDialog!=null)&&mProgressDialog.isShowing()) {
                    mProgressDialog.dismiss();
                    mProgressDialog = null;
                }
0
21.01.2015, 21:56
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.01.2015, 21:56
Привет! Вот еще темы с ответами:

Как вставить пробел после знака препинания, если его там нет? - C++
Приветствую! Такую вот программку реализовал. Она считывает строку (как сделать, чтобы считывала сразу текст, и делала это уже везде, а...

Всё правильно, а интернета нет. Чего не хватает? - Windows 7
Всем доброго времени суток! Я первый раз на этом форуме. Возможно, что создал тему не в том разделе. Если что – прошу поправить меня. Но...

Если нет интернета, то ожидать его появления - Visual Basic .NET
Нужно чтобы программа сначала проверяла подключен ли ПК к интернету,если да,то выполнять код дальше,если нет,то ожидать его появления. ...

Заменить значения по WHERE, а если совпадений нет то вставить - PostgreSQL
Приветствую. Можно ли одним запросом выполнить замену строки по совпадению WHERE, а если совпадения нет, то вставить строку? ...


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

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

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