Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 5.00/26: Рейтинг темы: голосов - 26, средняя оценка - 5.00
 Аватар для Kroshandowski
2 / 2 / 4
Регистрация: 05.04.2013
Сообщений: 234

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

20.01.2015, 22:19. Показов 6190. Ответов 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)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
20.01.2015, 22:19
Ответы с готовыми решениями:

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

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

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

42
210 / 210 / 60
Регистрация: 22.08.2014
Сообщений: 644
22.01.2015, 00:51
Лучший ответ Сообщение было отмечено Kroshandowski как решение

Решение

Студворк — интернет-сервис помощи студентам
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;
    }
}
1
 Аватар для Kroshandowski
2 / 2 / 4
Регистрация: 05.04.2013
Сообщений: 234
22.01.2015, 01:08  [ТС]
Armagedo, большое спасибо за время, потраченное на решение моего вопроса!
Небольшой оффтоп:
Почему именно StrictMode решил проблему?
0
210 / 210 / 60
Регистрация: 22.08.2014
Сообщений: 644
22.01.2015, 09:42
Цитата Сообщение от Kroshandowski Посмотреть сообщение
Небольшой оффтоп:
Почему именно StrictMode решил проблему?
Откуда вы взяли, что именно это решило задачу?
Это просто костыль, чтобы избежать android.os.NetworkOnMainThreadException
Не более...
И его не должно быть в готовом приложении.
0
 Аватар для Kroshandowski
2 / 2 / 4
Регистрация: 05.04.2013
Сообщений: 234
22.01.2015, 13:04  [ТС]
Armagedo, Мда Все таки CoolMind был прав на счет AsyncTask. Почитал про StrictMode и действительно костылище для отладки и только. И там все тычат на использования AsyncTask.

P.S. stackoverflow
0
426 / 406 / 68
Регистрация: 06.10.2012
Сообщений: 1,748
22.01.2015, 13:12
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-потоке.
1
 Аватар для Kroshandowski
2 / 2 / 4
Регистрация: 05.04.2013
Сообщений: 234
22.01.2015, 13:51  [ТС]
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;
    }
0
914 / 562 / 88
Регистрация: 13.02.2014
Сообщений: 2,083
22.01.2015, 14:03
Где ж вы ребята были когда я тут полгода назад спрашивал про проверку связи?
А какой метод лучше, 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;
}
0
 Аватар для Kroshandowski
2 / 2 / 4
Регистрация: 05.04.2013
Сообщений: 234
22.01.2015, 14:46  [ТС]
CoolMind, попробовал ваше решение проверки и оно РАБОТАЕТ даже без StrictMode.
0
210 / 210 / 60
Регистрация: 22.08.2014
Сообщений: 644
22.01.2015, 14:59
Естественно, потому что оно не проверяет есть ли доступ в "СЕТЬ ИНТЕРНЕТ", а не просто в сеть (WI-FI, GSM, ...)
Оно не использует соединенеие с глобальным ресурсом в основном потоке.

Что, в принципе, - фонарный столб для проверки возможности загрузки из сети интернет и с полезностью, стремящейся к бесконечно малой величине
0
914 / 562 / 88
Регистрация: 13.02.2014
Сообщений: 2,083
22.01.2015, 15:09
Цитата Сообщение от Armagedo Посмотреть сообщение
Естественно, потому что оно не проверяет есть ли доступ в "СЕТЬ ИНТЕРНЕТ"
А также требует дополнительное разрешение и кроме того, если сеть есть, но никакая, выкинет ошибку в асинктаске при коннекте.
1
 Аватар для Kroshandowski
2 / 2 / 4
Регистрация: 05.04.2013
Сообщений: 234
22.01.2015, 15:29  [ТС]
Armagedo, вы меня конечно извините,но некий сарказм, при объяснении новичку чего либо в той или иной сфере,не уместен.
Что, в принципе, - фонарный столб для проверки возможности загрузки из сети интернет и с полезностью, стремящейся к бесконечно малой величине
Если какой-то способ не правильный или расходится с общепринятыми правилами андройд разработки,то лучше написать что-то вроде: "Это не правильно,лучше сделать вот так" или "Я бы не использовал данный способ" или вообще кинуть какие нибудь статьи на прочтение,если не хотите изъяснить понятные и очевидные вам вещи.

P.S. Все что я написал выше,это не относится к понятию "Бомбануло" или "Обиделся". Критику я воспринимаю хорошо и даже прошу совета,как сделать лучше.
0
426 / 406 / 68
Регистрация: 06.10.2012
Сообщений: 1,748
22.01.2015, 15: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.
1
 Аватар для Kroshandowski
2 / 2 / 4
Регистрация: 05.04.2013
Сообщений: 234
22.01.2015, 15:35  [ТС]
Rube,
Цитата Сообщение от Rube Посмотреть сообщение
А также требует дополнительное разрешение
Какое дополнительное разрешение?
0
914 / 562 / 88
Регистрация: 13.02.2014
Сообщений: 2,083
22.01.2015, 15:37
ACCESS_NETWORK_STATE
0
 Аватар для Kroshandowski
2 / 2 / 4
Регистрация: 05.04.2013
Сообщений: 234
22.01.2015, 15:40  [ТС]
CoolMind, выходит,что проверку isConnected от Armagedo оставляем,а остальную часть переделываем под AsyncTask?
0
426 / 406 / 68
Регистрация: 06.10.2012
Сообщений: 1,748
22.01.2015, 15:42
Rube, ваш вариант IsConnected является частным случаем для 2 соединений. Он, конечно, верный, но проверяет только 2 соединения. Поэтому лучше использовать более общий случай (там цикл по всем соединениям).

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

Не по теме:

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

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

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

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

0
 Аватар для Kroshandowski
2 / 2 / 4
Регистрация: 05.04.2013
Сообщений: 234
22.01.2015, 15:59  [ТС]
Armagedo,

Не по теме:


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

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

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

1
914 / 562 / 88
Регистрация: 13.02.2014
Сообщений: 2,083
22.01.2015, 19:46
Запустил я эту проверку, вылетает на 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$AndroidBlockGuardP olicy.onNetwork(StrictMode.java:1133)
at java.net.InetAddress.lookupHostByName(In etAddress.java:385)
at java.net.InetAddress.getAllByNameImpl(In etAddress.java:236)
at java.net.InetAddress.getAllByName(InetAd dress.java:214)
at libcore.net.http.HttpConnection.<init>(H ttpConnection.java:70)
at libcore.net.http.HttpConnection.<init>(H ttpConnection.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.openSocketCo nnection(HttpEngine.java:316)
at libcore.net.http.HttpEngine.connect(Http Engine.java:311)
at libcore.net.http.HttpEngine.sendSocketRe quest(HttpEngine.java:290)
at libcore.net.http.HttpEngine.sendRequest( HttpEngine.java:240)
at libcore.net.http.HttpURLConnectionImpl.c onnect(HttpURLConnectionImpl.java:81)
at com.example.function.isNetwork.isConnect ed(isNetwork.java:55)

webview чтоли надо чтоб был?
0
 Аватар для Kroshandowski
2 / 2 / 4
Регистрация: 05.04.2013
Сообщений: 234
22.01.2015, 19:49  [ТС]
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");
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
22.01.2015, 19:49

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

если запускать приложение в вижуалке (ctrl + f5) то оно работает правильно, но если запустить через .exe файл - нет!
если запускать приложение в вижуалке (ctrl + f5) то оно работает правильно, но если запустить через .exe файл - нет! Что делать? Возможно...

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

Как правильно написать тэг, чтобы IMG SRC=КАРТИНА загружал например другую картину если нет той на которую ссылался?
как правильно написать тэг, чтобы IMG SRC=КАРТИНА загружал например другую картину если нет той на которую ссылался или вообще этот тэг не...

Стоит ли скрывать robots txt или нет? Если стоит, то как это надо правильно сделать?
Ребят, если стоит скрывать роботс, то скажите как это сделать, особо толком ничего не нашел в поисковике(больше спама).


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Расчёт периметра прямоугольника по координатам вершин
Maks 18.07.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Вычислить периметр прямоугольника, заданного координатами своих вершин на плоскости. Решение: Создан документ со следующими. . .
Подсчёт частоты трёхбуквенных слов в тексте
Maks 18.07.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Выясните, сколько раз в предложенном тексте встречается каждое трехбуквенное слово. Решение: Создан документ с единственным. . .
Сумма и количество положительных элементов в чётных строках массива
Maks 18.07.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Вычислить сумму и количество положительных элементов массива, расположенных в четных строках. Решение: Создан документ с. . .
Поиск произведения положительных чётных чисел в последовательности
Maks 18.07.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Дана произвольная последовательность целых чисел. Найти произведение положительных четных чисел данной последовательности. . . .
Обработка трёх чисел: утроение и возведение в степень
Maks 18.07.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Даны три действительных числа. Утроить те из них, значения которых неотрицательны, и возвести в четвертую степень отрицательные. . . .
Расчёт стоимости яблок по весу
Maks 18.07.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Написать программу вычисления стоимости некоторого количества (по весу) яблок. Решение: Создан документ, с табличной частью. . .
сукцессия 30. Фосфорный и азотный замки по "честному" закону лимитирования Либиха
anaschu 16.07.2026
Основные достижения за последние дни 1. Механизм отложенного высвобождения фосфора Добавлен специальный пул для медленного разложения меланизированных гиф ЕСМ Реализована разная скорость. . .
Запрет пометки на удаление и отмены проведения
Maks 16.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "ПутевойЛист" разработанного в КА2. Задача: запретить помечать на удаление и отменять проведения путевого листа при условии, если он сдан. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru