Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
17 / 5 / 0
Регистрация: 16.04.2016
Сообщений: 344

Не вызывается метод shouldOverrideUrlLoading при клике по ссылке webview

18.02.2020, 06:12. Показов 1780. Ответов 9

Студворк — интернет-сервис помощи студентам
Всех приветствую. В моей программе есть webView, которое отображает нестандартные ссылки, т.е ссылки вида exec:. Подскажите пожалуйста, почему для некоторых ссылок клик по ним не срабатывает. Для webView я делаю так:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
mainDescView = findViewById(R.id.main_desc);
        mainDescView.setWebViewClient(new client());
        mainDescView.loadDataWithBaseURL(
                "file:///",
                "<html>\n" +
                        " <head></head>\n" +
                        " <body>\n" +
                        "  Я оказываюсь в большой комнате, напичканной разными приборами, системными блоками, неизвестными механизмами, проводами и <a class=\"plain\" href=\"exec:c2hvd2hlYWQ9MSZkeW5hbWljICcnJmd0ICfQvNC+0L3QuNGC0L7RgNGLJw==\">погасшими мониторами</a>. Вдоль стен стоят стеллажи с научными исследованиями и заметками. На одной из стен висит географическая <a class=\"plain\" href=\"exec:c2hvd2hlYWQ9MSZkeW5hbWljICcnJmd0ICfQutCw0YDRgtCwJw==\">карта</a>. В углу находится капсула для подзарядки, опутанная проводами. В другом углу покоится массивный <a class=\"plain\" href=\"exec:c2hvd2hlYWQ9MSZkeW5hbWljICcnJmd0ICfRgdC10LnRhCc=\">сейф</a> с электронным замком.\n" +
                        "  <br>\n" +
                        "  <br>\n" +
                        " </body>\n" +
                        "</html>",
                "text/html",
                "UTF-8",
                "");
Код private класса, вложенного в класс с activity, очень простой.
Java
1
2
3
4
5
6
7
8
9
10
11
    private class client extends WebViewClient {
 
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, final String href) {
            if (href.toLowerCase().startsWith("exec:")) {
Toast.makeText(getApplicationContext(),"ссылка"+href+" выбрана",0).show();
            }
            return true;
        }
 
    }
Такая же проблема возникает и в некоторых других текстах. В данном примере проблема возникает только со ссылкой с текстом погасшими мониторами. Подскажите пожалуйста,лечится ли это вообще как-то и если нет, подскажите пожалуйста альтернативный компонент для размещения таких ссылок. Заранее всем огромное спасибо за помощь.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.02.2020, 06:12
Ответы с готовыми решениями:

Один и тот же метод объявлен в базовом private, а в производном public; и по ссылке на производный класс он не вызывается!
Прежде всего, вот код который компилится и работает, он описан у Эккеля (глава 8 &quot;Полиморфизм&quot;): import static...

WebView, открывается браузер при переходе по ссылке
Возникла проблема такого рода, что в приложении WebView часто перекидывает пользователя в браузер смартфона. Какие есть варианты для...

При клике по CheckBox MessageBox вызывается 2 раза.
void __fastcall TLCbotBySDmaN::CheckBox1_5Click(TObject *Sender) { if(Number == -1) { CheckBox1_5-&gt;Checked = 0; ...

9
15 / 15 / 2
Регистрация: 20.11.2009
Сообщений: 452
18.02.2020, 09:23
Начиная с 24 при используйте Override для метода
Java
1
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request)
https://developer.android.com/... rceRequest)
0
17 / 5 / 0
Регистрация: 16.04.2016
Сообщений: 344
18.02.2020, 14:47  [ТС]
Николай,этот метод тоже не вызывается. Я заметил такую вещь,что если сократить текст ссылки,то этот метод вызовется для этой ссылки,а так нет.
0
15 / 15 / 2
Регистрация: 20.11.2009
Сообщений: 452
18.02.2020, 15:01
Посмотрите лог, там должны быть сообщения при попытке открытия урлы
0
17 / 5 / 0
Регистрация: 16.04.2016
Сообщений: 344
18.02.2020, 15:48  [ТС]
Николай,а на что именно мне нужно обращать внимание в логе? Русского текста ссылки я там не наблюдаю. Не могли бы Вы пожалуйста проверить,будет ли у Вас эта проблема в указанном выше тексте.
0
15 / 15 / 2
Регистрация: 20.11.2009
Сообщений: 452
18.02.2020, 15:59
КАВ на различные эрроры или ворнинги. Проверить могу, напишите проблемную урлу
0
17 / 5 / 0
Регистрация: 16.04.2016
Сообщений: 344
18.02.2020, 17:24  [ТС]
Так я же написал выше текст и ссылку,где происходит проблема.

Добавлено через 56 минут
Также выше Вы сможете найти код. Возникла ли у Вас проблема на ссылке с текстом погасшими мониторами, или у Вас уведомление на этой ссылке тоже появляется?
0
15 / 15 / 2
Регистрация: 20.11.2009
Сообщений: 452
18.02.2020, 18:45
Во-первых
Code
1
Toast.makeText
Code
1
duration
у вас 0 замените на
Code
1
Toast.LENGTH_SHORT
На эмуляторе с 29 сдк, все работает без вопросов проверил на чистом приложении. Вот код:
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
public class MainActivity extends AppCompatActivity {
 
    private WebView wv;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        wv = findViewById(R.id.wv);
        wv.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, final String href) {
                if (href.toLowerCase().startsWith("exec:")) {
                    Toast.makeText(getApplicationContext(),"ссылка"+href+" выбрана", Toast.LENGTH_SHORT).show();
                }
                return true;
            }
        });
        wv.loadDataWithBaseURL(
                "file:///",
                "<html>\n" +
                        " <head></head>\n" +
                        " <body>\n" +
                        "  Я оказываюсь в большой комнате, напичканной разными приборами, системными блоками, неизвестными механизмами, проводами и <a class=\"plain\" href=\"exec:c2hvd2hlYWQ9MSZkeW5hbWljICcnJmd0ICfQvNC+0L3QuNGC0L7RgNGLJw==\">погасшими мониторами</a>. Вдоль стен стоят стеллажи с научными исследованиями и заметками. На одной из стен висит географическая <a class=\"plain\" href=\"exec:c2hvd2hlYWQ9MSZkeW5hbWljICcnJmd0ICfQutCw0YDRgtCwJw==\">карта</a>. В углу находится капсула для подзарядки, опутанная проводами. В другом углу покоится массивный <a class=\"plain\" href=\"exec:c2hvd2hlYWQ9MSZkeW5hbWljICcnJmd0ICfRgdC10LnRhCc=\">сейф</a> с электронным замком.\n" +
                        "  <br>\n" +
                        "  <br>\n" +
                        " </body>\n" +
                        "</html>",
                "text/html",
                "UTF-8",
                "");
 
    }
}
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
 
 
    <WebView
        android:id="@+id/wv"
        android:layout_width="409dp"
        android:layout_height="354dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="1.0"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
 
</androidx.constraintlayout.widget.ConstraintLayout>
Проверьте это в чистом проекте, если работает, ошибку нужно будет искать в другом месте
0
17 / 5 / 0
Регистрация: 16.04.2016
Сообщений: 344
18.02.2020, 19:09  [ТС]
И даже кликается по ссылке с текстом "погашими мониторами"?
0
15 / 15 / 2
Регистрация: 20.11.2009
Сообщений: 452
18.02.2020, 19:11
Да, все ок
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.02.2020, 19:11
Помогаю со студенческими работами здесь

Событие, которое вызывается при клике на кнопку рядом с датой DateTimePicker
Событие, которое вызывается при клике на кнопку рядом с датой DateTimePicker. Как называется?

При первом клике на ссылку открывать описание при втором переходить по ссылке
Есть ссылка с div в котором находиться описание к ссылке что-то типо card в bootstrap 4. Описание выводится при наведении, но для...

Подгрузка страницы при клике по ссылке
Добрый день! Скажите пожалуйста ,как реализовать подгрузку страницы при клике по ссылке?Делал так &lt;script&gt; $(function (){ ...

Переход по ссылке при клике на div
Здравствуйте, как сделать переход по ссылке при клике по блоку div, например &lt;div id=&quot;support&quot;&gt; asdasdasdasdadad ...

Переход по ссылке при двойном клике
Здравствуйте! Подскажите, как сделать, чтобы осуществлялся переход по ссылкам при двойном клике на картинку, в зависимости от ее id


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Квантовые алгоритмы и обработка строк в Q#
EggHead 07.06.2025
Квантовые вычисления перевернули наше представление о том, как работать с данными, а Q# стал одним из ключевых языков для разработки квантовых алгоритмов. В традиционых системах мы оперируем битами —. . .
NUnit и C#
UnmanagedCoder 07.06.2025
В . NET существует несколько фреймворков для тестирования: MSTest (встроенный в Visual Studio), xUnit. net (более новый фреймворк) и, собственно, NUnit. Каждый имеет свои преимущества, но NUnit. . .
с++ Что нового?
russiannick 06.06.2025
Продолжаю обзор dev-cpp5. 11. Посмотрев на проекты, предоставленные нам для обучения, становится видно, что они разные по содержащимся файлам где: . dev обязательно присутствует . cpp/ . c один из них. . .
WebAssembly в Kubernetes
Mr. Docker 06.06.2025
WebAssembly изначально разрабатывался как бинарный формат инструкций для виртуальной машины, обеспечивающий высокую производительность в браузерах. Но потенциал технологии оказался гораздо шире - она. . .
Как создать первый микросервис на C# с ASP.NET Core, step by step
stackOverflow 06.06.2025
Если говорить простыми словами, микросервисная архитектура — это подход к разработке, при котором приложение строится как набор небольших, слабо связанных сервисов, каждый из которых отвечает за. . .
Рисование коллайдеров Box2D v2 на Three.js с помощью порта @box2d/core
8Observer8 06.06.2025
Используется порт Box2D v2 под названием @box2d/ core - пакет NPM. Загрузил документацию Box2D v2 на Netlify: https:/ / box2d-v2-docs. netlify. app/ Документацию Box2D v2 можно скачать с официального. . .
Как создать стек в Python
AI_Generated 05.06.2025
Как архитектор с более чем десятилетним опытом работы с Python, я неоднократно убеждался, что знание низкоуровневых механизмов работы стеков дает конкурентное преимущество при решении сложных задач. . . .
Server-Sent Events (SSE) в Node.js
run.dev 05.06.2025
Потоковая передача данных с сервера прямо в браузер стала повседневной потребностью - от биржевых графиков и спортивных трансляций до чатов и умных дашбордов. Много лет разработчики полагались на. . .
Создаем RESTful API на Golang с Fiber
golander 04.06.2025
Я перепробовал десятки фреймворков для создания RESTful API за последние годы, и когда впервые столкнулся с Fiber, понял, что это совсем другой уровень. Нет, я не собираюсь рассказывать сказки о. . .
Как работать с куки в ASP.NET Core
UnmanagedCoder 04.06.2025
Когда я впервые начал работать с куки в ASP. NET Core, меня поразило, насколько отличается работа с ними от классического ASP. NET. В Core все стало более декомпозированным - больше нет удобного. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
OSZAR »