android webview中的链接打开两次

时间:2014-10-01 14:53:52

标签: php android html mysql android-webview

我对android的webview有一个奇怪的问题。我将一个页面加载到webview中,其中包含一个链接。我已将webview设置为在同一webview中打开该链接(而不是在浏览器上)。当下一页打开时,它会向mysql写一些东西。如果用户已在同一天打开该第二页,则用户将被重定向到第一页,并且没有任何内容写入mysql。我注意到在第一种情况下的3-4次中有1次按下链接将内容写入mysql两次(具有相同的时间戳)并立即将用户重定向到第一页。因此,当点击链接时,似乎连续两次打开网址。一切都在我的计算机浏览器(safari,firefox和chrome)上运行。我发现一些文章说文件上的空src-fields会导致这种情况,但我的php / html代码中没有空的src-fields。

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);
    }

我的链接只是一个锚标记内的典型div(用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>';

2 个答案:

答案 0 :(得分:2)

实际上只返回false,网页会自动加载到WebView。无需使用webView.loadUrl();

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

尝试一下,如果不起作用,请告诉我。

作为Documentation州 -

  

while返回false表示当前WebView处理url

答案 1 :(得分:0)

好的,我找到了原因。这是原因:

        @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,但是当第一次加载webview时它没有这样做。当我将return语句更改为true时,它只会按照每次点击打印一次。