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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.77
Kroshandowski
 Аватар для Kroshandowski
2 / 2 / 0
Регистрация: 05.04.2013
Сообщений: 234
20.01.2015, 22:19     Как правильно вставить AlertDialog, если нет интернета? #1
Здравствуйте!Как правильно вставить 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");
    }
Заранее спасибо.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.01.2015, 22:19     Как правильно вставить AlertDialog, если нет интернета?
Посмотрите здесь:

Android AlertDialog Error
Android Не показывается AlertDialog
Как сделать AlertDialog со списком с цветными строками? Android
Потоки и AlertDialog Android
Custom AlertDialog Android
AlertDialog Android
Android Как сделать такое AlertDialog
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Armagedo
208 / 208 / 60
Регистрация: 22.08.2014
Сообщений: 644
22.01.2015, 00:51     Как правильно вставить AlertDialog, если нет интернета? #21
Сообщение было отмечено автором темы, экспертом или модератором как ответ
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
import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Bundle;
import android.os.StrictMode;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;
 
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;
 
public class Second extends Activity {
    ProgressDialog mProgressDialog;
    WebView webview;
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.second);
 
        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
        StrictMode.setThreadPolicy(policy);
 
        webview = (WebView) findViewById(R.id.webView);
        webview.getSettings().setJavaScriptEnabled(true);
        webview.setWebViewClient(new WebViewClient() {
 
            @Override
            public void onPageFinished(WebView view, String url) {
                super.onPageFinished(view, url);
                    if ((mProgressDialog!=null)&&mProgressDialog.isShowing()) {
                    mProgressDialog.dismiss();
                    mProgressDialog = null;
                }
            }
        });
 
        mProgressDialog = new ProgressDialog(this);
        mProgressDialog.setTitle("Открываем сайт");
        mProgressDialog.setMessage("Пожалуйста подождите...");
        mProgressDialog.setCancelable(false);
        mProgressDialog.show();
 
        if (isConnected(this)) {
            webview.loadUrl("http://www.google.com/");
        }   else {
            mProgressDialog.dismiss();
            AlertDialog alertDialog = new AlertDialog.Builder(this).create();
            alertDialog.setTitle("Нет доступа в интернет!");
            alertDialog.setMessage("Включите моб.данные и нажмите кнопку обновить");
            alertDialog.setButton(AlertDialog.BUTTON_POSITIVE,
                                  "OK",
                                  new DialogInterface.OnClickListener() {
                                        public void onClick(DialogInterface dialog, int which) {
                                            dialog.cancel();
                                        }
                                  });
            alertDialog.show();
        }
    }
 
 
    public 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)
                    return true;
                else
                    return false;
            } catch (IOException e) {
                return false;
            }
        } else
            return false;
    }
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kroshandowski
 Аватар для Kroshandowski
2 / 2 / 0
Регистрация: 05.04.2013
Сообщений: 234
22.01.2015, 01:08  [ТС]     Как правильно вставить AlertDialog, если нет интернета? #22
Armagedo, большое спасибо за время, потраченное на решение моего вопроса!
Небольшой оффтоп:
Почему именно StrictMode решил проблему?
Armagedo
208 / 208 / 60
Регистрация: 22.08.2014
Сообщений: 644
22.01.2015, 09:42     Как правильно вставить AlertDialog, если нет интернета? #23
Цитата Сообщение от Kroshandowski Посмотреть сообщение
Небольшой оффтоп:
Почему именно StrictMode решил проблему?
Откуда вы взяли, что именно это решило задачу?
Это просто костыль, чтобы избежать android.os.NetworkOnMainThreadException
Не более...
И его не должно быть в готовом приложении.
Kroshandowski
 Аватар для Kroshandowski
2 / 2 / 0
Регистрация: 05.04.2013
Сообщений: 234
22.01.2015, 13:04  [ТС]     Как правильно вставить AlertDialog, если нет интернета? #24
Armagedo, Мда Все таки CoolMind был прав на счет AsyncTask. Почитал про StrictMode и действительно костылище для отладки и только. И там все тычат на использования AsyncTask.

P.S. stackoverflow
CoolMind
411 / 394 / 65
Регистрация: 06.10.2012
Сообщений: 1,701
22.01.2015, 13:12     Как правильно вставить AlertDialog, если нет интернета? #25
Kroshandowski, спасибо за комплимент.
В общем, я у себя обычно использую предварительную проверку на наличие доступа к Wi-Fi или сотовой сети (без проверки наличия там Интернета). Это сразу отсеивает случаи, когда устройство в оффлайн-режиме. Функция такая:
Java
1
2
3
4
5
6
7
8
9
10
11
12
    public boolean isConnected(Context context){
        ConnectivityManager connectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        if (connectivity != null) {
            NetworkInfo[] info = connectivity.getAllNetworkInfo();
            if (info != null)
                for (NetworkInfo networkInfo : info) {
                    if (networkInfo.isAvailable() && networkInfo.isConnected())
                        return true;
                }
        }
        return false;
    }
Дальше у меня обычно идёт скачивание данных (уже в фоновом потоке), и если в нём обнаруживается ошибка, то она выдаётся на экран.
Если брать вашу ситуацию, то можно попробовать всё равно сделать AsyncTask, но с вашей функцией, только вставить её в doInBackground (честно говоря, не пробовал, может быть, и не стоит так делать). По окончании в onPostExecute прописать скачивание в WebView.
Либо, если вы используете Thread, там можно прописать выполнение кода в UI-потоке.
Kroshandowski
 Аватар для Kroshandowski
2 / 2 / 0
Регистрация: 05.04.2013
Сообщений: 234
22.01.2015, 13:51  [ТС]     Как правильно вставить AlertDialog, если нет интернета? #26
CoolMind, спасибо,что поделились свои решением проверки. Просто я сейчас уже не знаю,что является наиболее верным решением моего случая и начитавшись в "Стеке","Хеше","Хабре","СтартАндройде" или здесь на форуме о подобных проблемах и путях решения, теперь у меня такая каша в голове.
А если по теме, то AsyncTask я использовал для парсинга страниц с помощью Jsoup и вроде бы пока не вылетало и все работает.
Если взять за основу стандартный шаблон AsyncTask'a:
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
private class MyTask extends AsyncTask<Void, Void, Void> {
                private ProgressDialog spinner;
 
                @Override
                protected void onPreExecute() {
                        // Вначале мы покажем пользователю ProgressDialog 
                        // чтобы он понимал что началась загрузка
                        // этот метод выполняется в UI потоке
                        spinner = new ProgressDialog(MyActivity.this);
                        spinner.setMessage("Идет загрузка...");
                        spinner.show();
                }
 
                @Override
                protected Void doInBackground(Void... text) {
                        // тут мы делаем основную работу по загрузке данных 
                        // этот метод выполяется в другом потоке
                }
 
                @Override
                protected void onPostExecute(Void result) {
                        // Загрузка закончена. Закроем ProgressDialog.
                        // этот метод выполняется в UI потоке
                    spinner.dismiss();
                }
 
        }
Где должен располагаться ваш пример выше,который должен запустить дальнейшую работу с инетом или вызвать AlertDialog?

Добавлено через 24 минуты
Как-то так наверно

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
@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.second);      
 
        new Title().execute();
 
private class MyTask extends AsyncTask<Void, Void, Void> {
                private ProgressDialog spinner;
 
                @Override
                protected void onPreExecute() {
                        // Вначале мы покажем пользователю ProgressDialog 
                        // чтобы он понимал что началась загрузка
                        // этот метод выполняется в UI потоке
                        spinner = new ProgressDialog(Second.this);
                        spinner.setMessage("Идет загрузка...");
                        spinner.show();
                }
 
                @Override
                protected Void doInBackground(Void... text) {
                       if (isConnected(this)) {
                           webview.loadUrl("file:///android_asset/traffic/index.html");
                               }   else {
                        mProgressDialog.dismiss();
                        AlertDialog alertDialog = new AlertDialog.Builder(this).create();
                        alertDialog.setTitle("Нет доступа в интернет!");
                        alertDialog.setMessage("Включите моб.данные и нажмите кнопку обновить");
                        alertDialog.setButton(AlertDialog.BUTTON_POSITIVE,"OK",new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int which) {
                            dialog.cancel();
                            }
                       });
            alertDialog.show();
                    }
               }
 
                @Override
                protected void onPostExecute(Void result) {
                        // Загрузка закончена. Закроем ProgressDialog.
                        // этот метод выполняется в UI потоке
                    spinner.dismiss();
                }
 
        }
 
public boolean isConnected(Context context){
        ConnectivityManager connectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        if (connectivity != null) {
            NetworkInfo[] info = connectivity.getAllNetworkInfo();
            if (info != null)
                for (NetworkInfo networkInfo : info) {
                    if (networkInfo.isAvailable() && networkInfo.isConnected())
                        return true;
                }
        }
        return false;
    }
Rube
910 / 558 / 87
Регистрация: 13.02.2014
Сообщений: 2,068
22.01.2015, 14:03     Как правильно вставить AlertDialog, если нет интернета? #27
Где ж вы ребята были когда я тут полгода назад спрашивал про проверку связи?
А какой метод лучше, isConnected которые?
У меня используется немного измененный второй:
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
public boolean isConnected(Context context) {
    boolean status = false;
    try {
        ConnectivityManager cm = (ConnectivityManager) context
                .getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo netInfo = cm.getNetworkInfo(0);
        if (netInfo != null
                && netInfo.getState() == NetworkInfo.State.CONNECTED) {
            status = true;
        } else {
            netInfo = cm.getNetworkInfo(1);
            if (netInfo != null
                    && netInfo.getState() == NetworkInfo.State.CONNECTED)
                status = true;
        }
    } catch (Exception e) {
        e.printStackTrace();
        return false;
    }
    if (status != true)
        Toast.makeText(context,
                R.string.toast_never_internet, Toast.LENGTH_SHORT).show();
    return status;
}
Kroshandowski
 Аватар для Kroshandowski
2 / 2 / 0
Регистрация: 05.04.2013
Сообщений: 234
22.01.2015, 14:46  [ТС]     Как правильно вставить AlertDialog, если нет интернета? #28
CoolMind, попробовал ваше решение проверки и оно РАБОТАЕТ даже без StrictMode.
Armagedo
208 / 208 / 60
Регистрация: 22.08.2014
Сообщений: 644
22.01.2015, 14:59     Как правильно вставить AlertDialog, если нет интернета? #29
Естественно, потому что оно не проверяет есть ли доступ в "СЕТЬ ИНТЕРНЕТ", а не просто в сеть (WI-FI, GSM, ...)
Оно не использует соединенеие с глобальным ресурсом в основном потоке.

Что, в принципе, - фонарный столб для проверки возможности загрузки из сети интернет и с полезностью, стремящейся к бесконечно малой величине
Rube
910 / 558 / 87
Регистрация: 13.02.2014
Сообщений: 2,068
22.01.2015, 15:09     Как правильно вставить AlertDialog, если нет интернета? #30
Цитата Сообщение от Armagedo Посмотреть сообщение
Естественно, потому что оно не проверяет есть ли доступ в "СЕТЬ ИНТЕРНЕТ"
А также требует дополнительное разрешение и кроме того, если сеть есть, но никакая, выкинет ошибку в асинктаске при коннекте.
Kroshandowski
 Аватар для Kroshandowski
2 / 2 / 0
Регистрация: 05.04.2013
Сообщений: 234
22.01.2015, 15:29  [ТС]     Как правильно вставить AlertDialog, если нет интернета? #31
Armagedo, вы меня конечно извините,но некий сарказм, при объяснении новичку чего либо в той или иной сфере,не уместен.
Что, в принципе, - фонарный столб для проверки возможности загрузки из сети интернет и с полезностью, стремящейся к бесконечно малой величине
Если какой-то способ не правильный или расходится с общепринятыми правилами андройд разработки,то лучше написать что-то вроде: "Это не правильно,лучше сделать вот так" или "Я бы не использовал данный способ" или вообще кинуть какие нибудь статьи на прочтение,если не хотите изъяснить понятные и очевидные вам вещи.

P.S. Все что я написал выше,это не относится к понятию "Бомбануло" или "Обиделся". Критику я воспринимаю хорошо и даже прошу совета,как сделать лучше.
CoolMind
411 / 394 / 65
Регистрация: 06.10.2012
Сообщений: 1,701
22.01.2015, 15:32     Как правильно вставить AlertDialog, если нет интернета? #32
Kroshandowski, ту функцию, которую я написал (взял со stackoverflow), можно использовать на первоначальном этапе для проверки, есть ли у устройства какое-то соединение. И если есть, можно делать дальнейшие проверки и загрузки. Как правильно упомянул Rube, требуется дополнительное разрешение. Поэтому вы можете не применять этот способ, как правильно отметил Armagedo. (Ещё раз: если есть подключение к Wi-Fi, но роутер не раздаёт Интернет, то проверка будет пройдена).
Более правильным будет вариант с проверкой по таймауту, предложенный Armagedo. В этому случае, если телефон ни к чему не подключён, всё равно будет тратиться одна секунда. Поэтому вам требуется либо совместить оба подхода, либо использовать только вариант Armagedo. Я не пробовал работу с Thread, только с AsyncTask, поэтому кратко прокомментирую.
У него есть 5 методов (для последних версий Андроида): onPreExecute, doInBackground, onPostExecute, onCancelled (отсутствует в старых версиях), onProgressUpdate. Из них вам точно потребуются первые три.
Стандартным способом считается вынос всей логики для работы с интерфейсом в методы onPreExecute и onPostExecute, а фоновой работы - в doInBackground. Обработка doInBackground обязательна. При этом советую не использовать упоминания контролов в doInBackground, по крайней мере, не обновляйте их. Интерфейсная часть там не должна присутствовать (за исключением того случая, когда контрол сам создаётся в doInBackground). Даже просто создание объектов, зависящих от контекста, рекомендую делать в onPreExecute.
В общем, проверку Интернета можете сделать в doInBackground, а заполнение WebView - в onPostExecute.
Но раз уж проверка основана во Thread, можно попробовать всё сделать во Thread.
Kroshandowski
 Аватар для Kroshandowski
2 / 2 / 0
Регистрация: 05.04.2013
Сообщений: 234
22.01.2015, 15:35  [ТС]     Как правильно вставить AlertDialog, если нет интернета? #33
Rube,
Цитата Сообщение от Rube Посмотреть сообщение
А также требует дополнительное разрешение
Какое дополнительное разрешение?
Rube
910 / 558 / 87
Регистрация: 13.02.2014
Сообщений: 2,068
22.01.2015, 15:37     Как правильно вставить AlertDialog, если нет интернета? #34
ACCESS_NETWORK_STATE
Kroshandowski
 Аватар для Kroshandowski
2 / 2 / 0
Регистрация: 05.04.2013
Сообщений: 234
22.01.2015, 15:40  [ТС]     Как правильно вставить AlertDialog, если нет интернета? #35
CoolMind, выходит,что проверку isConnected от Armagedo оставляем,а остальную часть переделываем под AsyncTask?
CoolMind
411 / 394 / 65
Регистрация: 06.10.2012
Сообщений: 1,701
22.01.2015, 15:42     Как правильно вставить AlertDialog, если нет интернета? #36
Rube, ваш вариант IsConnected является частным случаем для 2 соединений. Он, конечно, верный, но проверяет только 2 соединения. Поэтому лучше использовать более общий случай (там цикл по всем соединениям).

Добавлено через 1 минуту
Kroshandowski, видимо, так, но я не могу этого подтвердить, потому что не знаю, как ведёт себя программа, запускающая фоновый процесс из фонового процесса.
Armagedo
22.01.2015, 15:46
  #37

Не по теме:

Kroshandowski, у меня и мысли не было унижать или преумалять чьё-то решение.
Если выпройдете к аналам топика, то увидите, что я честно признаюь, что решение подсмотрено, стырено, позаимствовано, спёрто и прочие синонимы, указывающее на мою нулевую причастность к этому коду, кроме копипаста и лёгкой шлифовки.

Но, раз уж мы хотим быть объективными, то решение проверяющее наличие доступа только в сеть, не дает ответа на вопрос, а есть ли доступ в СЕТЬ ИНТЕРНЕТ.
Вот об этом я и говорю.
Нравится кому-то это или нет, но - это так

И да, напоследок.
Мне совершенно не нравится ваш подход к обучению.
Без обид.
Так вы ничему не научитесь, поскольку в голову откладывается только то, что решил, проговорил и написал сам.
Вот вы знаете, почему у вас в предпоследней редакции кода алертдиалог "закрывался" с третьего раза?
А у меня на приблуде даже с одиннадцатого?
Нет?
То-то же...
Но я-то знаю, я-то знаю

За сим откланиваюсь и отписываюсь.

Kroshandowski
 Аватар для Kroshandowski
2 / 2 / 0
Регистрация: 05.04.2013
Сообщений: 234
22.01.2015, 15:59  [ТС]     Как правильно вставить AlertDialog, если нет интернета? #38
Armagedo,

Не по теме:


я знаю,что вы это вряд ли прочтете,но все же....
Вот смотрите....это форум т.е. здесь задают вопрос и на него отвечают те,кто знает или решил этот вопрос.
Если кто-то из участников пишет мне в ответ,то я полагаю,что данный человек готов кинуть правильное решение,дать ссылку,подредактировать "говнокодерство" новичков и т.д.
Если Гуру программирования посмотрит на мой вопрос и сочтет,что я должен для начала изучить это,изучить то,почитать здесь или еще где....то он просто пройдет мимо вопроса поймав себя на том,что лучше не вникать в бредни новичка "говнокодера" и ВСЕ!

Но вы поначалу мне помогли и написали даже рабочий пример (хотя костыль,но все же). И на этом вы могли закончить и отписаться от данного топика,но нет....далее вы стали подкалывать. И опять же вы за свое:

Цитата Сообщение от Armagedo Посмотреть сообщение
Вот вы знаете, почему у вас в предпоследней редакции кода алертдиалог "закрывался" с третьего раза?
А у меня на приблуде даже с одиннадцатого?
Нет?
То-то же...
Но я-то знаю, я-то знаю

Rube
910 / 558 / 87
Регистрация: 13.02.2014
Сообщений: 2,068
22.01.2015, 19:46     Как правильно вставить AlertDialog, если нет интернета? #39
Запустил я эту проверку, вылетает на urlc.connect();
Кликните здесь для просмотра всего текста
01-22 21:42:04.121: E/AndroidRuntime(1477): FATAL EXCEPTION: main
01-22 21:42:04.121: E/AndroidRuntime(1477): android.os.NetworkOnMainThreadException
at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1133)
at java.net.InetAddress.lookupHostByName(InetAddress.java:385)
at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)
at java.net.InetAddress.getAllByName(InetAddress.java:214)
at libcore.net.http.HttpConnection.<init>(HttpConnection.java:70)
at libcore.net.http.HttpConnection.<init>(HttpConnection.java:50)
at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:340)
at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:87)
at libcore.net.http.HttpConnection.connect(HttpConnection.java:128)
at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:316)
at libcore.net.http.HttpEngine.connect(HttpEngine.java:311)
at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:290)
at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:240)
at libcore.net.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:81)
at com.example.function.isNetwork.isConnected(isNetwork.java:55)

webview чтоли надо чтоб был?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.01.2015, 19:49     Как правильно вставить AlertDialog, если нет интернета?
Еще ссылки по теме:

Android TextView а AlertDialog
Android Загрузка картинок Picasso из дискового кэша, когда нет интернета
Android Spinner в AlertDialog
Android AlertDialog и RadioGroup
Android Как менять message AlertDialog в зависимости от progress SeekBar?

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

Или воспользуйтесь поиском по форуму:
Kroshandowski
 Аватар для Kroshandowski
2 / 2 / 0
Регистрация: 05.04.2013
Сообщений: 234
22.01.2015, 19:49  [ТС]     Как правильно вставить AlertDialog, если нет интернета? #40
CoolMind, я убрал из этого варианта StrictMode и все остальное оставил как предложил 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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Bundle;
import android.os.StrictMode;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;
 
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;
 
public class Second extends Activity {
    ProgressDialog mProgressDialog;
    WebView webview;
 
    @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() {
 
            @Override
            public void onPageFinished(WebView view, String url) {
                super.onPageFinished(view, url);
                    if ((mProgressDialog!=null)&&mProgressDialog.isShowing()) {
                    mProgressDialog.dismiss();
                    mProgressDialog = null;
                }
            }
        });
 
        mProgressDialog = new ProgressDialog(this);
        mProgressDialog.setTitle("Открываем сайт");
        mProgressDialog.setMessage("Пожалуйста подождите...");
        mProgressDialog.setCancelable(false);
        mProgressDialog.show();
 
        if (isConnected(this)) {
            webview.loadUrl("file:///android_asset/index.html");
        }   else {
            mProgressDialog.dismiss();
            AlertDialog alertDialog = new AlertDialog.Builder(this).create();
            alertDialog.setTitle("Нет доступа в интернет!");
            alertDialog.setMessage("Включите моб.данные и нажмите кнопку обновить");
            alertDialog.setButton(AlertDialog.BUTTON_POSITIVE,
                                  "OK",
                                  new DialogInterface.OnClickListener() {
                                        public void onClick(DialogInterface dialog, int which) {
                                            dialog.cancel();
                                        }
                                  });
            alertDialog.show();
        }
    }
 
 
    public 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)
                    return true;
                else
                    return false;
            } catch (IOException e) {
                return false;
            }
        } else
            return false;
    }
}
Добавлено через 1 минуту
Rube, ну да webview отображает у меня html файлик из asset
Java
1
webview.loadUrl("file:///android_asset/index.html");
Yandex
Объявления
22.01.2015, 19:49     Как правильно вставить AlertDialog, если нет интернета?
Ответ Создать тему
Опции темы

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