Ссылка внутри андроида открывается дважды

У меня странная проблема с просмотром веб-страниц Android. Я загружаю страницу в веб-просмотр, на котором есть ссылка. Я установил веб-представление, чтобы открыть эту ссылку в том же веб-представлении (не в браузере). Когда открывается следующая страница, она записывает некоторые вещи в MySQL. Если пользователь уже открыл эту вторую страницу в тот же день, он перенаправляется на первую страницу, и в mysql ничего не записывается. Я заметил, что в 1 из 3-4 раз при первой ситуации нажатие на ссылку записывает материал в mysql дважды (с одной и той же временной меткой) и перенаправляет пользователя сразу на первую страницу. Таким образом, кажется, что при нажатии на ссылку URL открывается дважды подряд. Все работает как положено в браузерах моего компьютера (Safari, Firefox и Chrome). Я нашел статью, в которой говорилось, что пустые поля src на изображениях могут вызывать это, но в моем коде php / html нет пустых полей src.

Webview настроен так:

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_description);

WebViewClient yourWebClient = new WebViewClient()
{

public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
webView.loadUrl("file:///android_asset/404.html");
}

@Override
public boolean shouldOverrideUrlLoading(WebView view, String  url)
{
if ( url.contains("google") == false ) {
webView.loadUrl(url);
return false;
}
else {
Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(i);
return true;
}
}
};

webView = (WebView) findViewById(R.id.description);
webView.getSettings().setJavaScriptEnabled(true);

if (Build.VERSION.SDK_INT >= 11){
webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
}

String url = (MainActivity.URL+"app/description.php?tagid="+tagId+"&screenwidth="+viewPortWidth+"&screenheight="+viewPortHeight+"&deviceid="+MainActivity.myDeviceId+"&lang="+MainActivity.myLanguage+"&os=android);

webView.setWebViewClient(yourWebClient);
webView.loadUrl(url);
}

Моя ссылка — это просто типичный тег внутри тега привязки (написанный на php):

echo '<a href="description.php?type='.$type.'&screenwidth='.$screenWidth.'&screenheight='.$screenHeight.'&tagid='.$tagid.'&no=1&deviceid='.$deviceid.'&lang='.$language.'">
<div class="redbutton">'.$lang['NO'].'</div></a>';

0

Решение

На самом деле только вернуть false, веб-страница будет автоматически загружена в WebView, Не нужно использовать webView.loadUrl();,

if ( url.contains("google") == false ) {
return false;
}

Попробуйте и дайте мне знать, если не сработает.

Как Документация состояния —

в то время как return false означает, что текущий WebView обрабатывает URL

2

Другие решения

Хорошо, я нашел причину для этого. Это было причиной:

        @Override
public boolean shouldOverrideUrlLoading(WebView view, String  url)
{

if ( url.contains("google") == false ) {

webView.loadUrl(url);
return false; // <----THIS LINE
}
else {
Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(i);
return false;
}
}

Это должно было вернуться правда. Я выяснил это, протестировав это:

@Override
public void onPageFinished(WebView view, String url)
{

super.onPageFinished(view, url);
String url_new = view.getUrl();

Log.v("","Webview url: "+url_new);

}

Я заметил, что он выводил URL дважды при каждом нажатии какой-либо ссылки, но этого не происходило при первой загрузке веб-просмотра. Когда я изменил выражение return на true, оно распечатывалось только один раз за клик, как и предполагалось.

0