Android应用程序开发 - WebView不起作用。

9

Android可以使用WebView在应用程序中显示URL的内容。 然而,由于某种原因它对我来说没有起作用。以下是我正在使用的代码:

package com.news;

import android.app.Activity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.webkit.WebView;
import android.webkit.WebViewClient;

public class NewsActivity extends Activity {
    WebView mWebView;

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

        mWebView = (WebView) findViewById(R.id.webview);
        mWebView.setWebViewClient(new NewsClient());
        mWebView.getSettings().setJavaScriptEnabled(true);
        mWebView.getSettings().setDomStorageEnabled(true);
        mWebView.loadUrl("http://www.androidpeople.com");
    }


    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) {
            mWebView.goBack();            
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }

    private class NewsClient extends WebViewClient {

        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            System.out.println("URL: " + url);
            view.loadUrl(url);
            return true;
        }
    }
}

你在Android清单文件中授予了Internet访问权限吗? - sat
也许你可以在这里找到解决方案: https://stackoverflow.com/a/54129121/9764941 - Ali Azaz Alam
5个回答

4

很明显!

您正在实现一个新的WebViewClient,在其中覆盖了shouldOverrideUrlLoading方法。每次加载url时都会调用此方法。那你在那里做什么呢?您返回true(表示应该覆盖加载),然后开始加载相同的url!因此,url加载将永远不会发生。

只需删除该行:

mWebView.setWebViewClient(new NewsClient());

提交表单时出现了一个小问题,即在第一页显示的表单中,它会在浏览器中打开下一页,而不是应用程序中。我该怎么解决? - Abhishek Jain
你应该返回 false。 - Chandan kushwaha

0

如果尚未添加,请在您的Android清单中添加以下内容:

<uses-permission android:name="android.permission.INTERNET" />

这行代码必须放在你的 AndroidManifest.xml 文件的 <manifest> 元素内。


0

你的代码在我的安卓设备4.2.2上可以运行,实现没有问题,唯一需要做的就是像这样重写你的方法:

   @Override
   public boolean shouldOverrideUrlLoading(WebView view, String url) {
        System.out.println("URL: " + url);
        view.loadUrl(url);
        return true;
    }

这个方法


0
添加这行代码: mWebView.setWebViewClient(new NewsClient()); 但是shouldOverrideUrlLoading应该返回false

请您能否在代码中加入解释,说明为什么这段代码可以回答问题?仅有代码的回答是不被鼓励的,因为它们无法教授解决方案。 - Nathan Tuggy

0

2
Shorifa Islam,欢迎提供解决方案的链接,但请确保您的答案即使没有链接也是有用的:在链接周围添加上下文,以便您的同行用户了解它的存在和原因,然后引用您链接到的页面中最相关的部分,以防目标页面不可用。仅仅是一个链接的答案可能会被删除。 - STA

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接