【问题标题】:What's the place of this code about urls in webview?这段关于 url 的代码在 webview 中的位置是什么?
【发布时间】:2012-07-14 17:28:29
【问题描述】:

我想将此代码添加到我的 java 文件中:

webView.setWebViewClient(new WebViewClient(){
   public boolean shouldOverrideUrlLoading(WebView view, String url) {
       if (url != null && url.startsWith("http://")) {
           view.getContext().startActivity(
               new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
           return true;
       } else {
           return false;
       }
   }
}

但我不知道在哪里。这是我的java文件: 包sherdle.donald.duck.app; 导入android.app.Activity; 导入android.os.Bundle; 导入android.view.Window; 导入 android.webkit.WebChromeClient; 导入 android.webkit.WebView; 导入 android.webkit.WebViewClient; 公共类 WebPageLoader 扩展了 Activity { WebView webview;

final Activity activity = this;

@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
this.getWindow().requestFeature(Window.FEATURE_PROGRESS);
setContentView(R.layout.main);
webview = (WebView) findViewById(R.id.webview);
webview.getSettings().setJavaScriptEnabled(true);
webview.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
webview.getSettings().setSupportMultipleWindows(true);
webview.getSettings().setPluginsEnabled(true);

webview.setWebChromeClient(new WebChromeClient() {
    public void onProgressChanged(WebView view, int progress)
    {
        activity.setTitle("Loading...");
        activity.setProgress(progress * 100);

        if(progress == 100)
            activity.setTitle(R.string.app_name);
    }
 });

 webview.setWebViewClient(new WebViewClient() {


    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url)
    {
        view.loadUrl(url);
        return true;

    }
   });



 webview.loadUrl("http://www.sherdle.com/apphosting/dd");
 }

 @Override
 public void onBackPressed (){
    if(webview.canGoBack()) webview.goBack();
    else super.onBackPressed();
 }
 }

我是 android 新手,我所做的每一件事都需要很多帮助。感谢您的帮助。

我现在已经有了这个: 包sherdle.donald.duck.app; 导入android.app.Activity; 导入android.os.Bundle; 导入android.view.Window; 导入 android.webkit.WebChromeClient; 导入 android.webkit.WebView; 导入 android.webkit.WebViewClient; 公共类 WebPageLoader 扩展了 Activity { WebView webview;

final Activity activity = this;

@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
this.getWindow().requestFeature(Window.FEATURE_PROGRESS);
setContentView(R.layout.main);
webview = (WebView) findViewById(R.id.webview);
webview.getSettings().setJavaScriptEnabled(true);
webview.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
webview.getSettings().setSupportMultipleWindows(true);
webview.getSettings().setPluginsEnabled(true);

 webview.setWebChromeClient(new WebChromeClient() {
    public void onProgressChanged(WebView view, int progress)
    {
        activity.setTitle("Loading...");
        activity.setProgress(progress * 100);

        if(progress == 100)
            activity.setTitle(R.string.app_name);
    }
 });



 webview.setWebViewClient(new WebViewClient() {


    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url)
    {
        view.loadUrl(url);
        return true;

    }
 });

 webview.setWebChromeClient(new WebChromeClient(){
   public boolean shouldOverrideUrlLoading(WebView view, String url) {
       if (url != null && url.startsWith("http://")) {
           view.getContext().startActivity(
               new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
           return true;
       } else {
           return false;
       }
   }

  webview.loadUrl("http://www.sherdle.com/apphosting/dd");
  }



 @Override
 public void onBackPressed (){
    if(webview.canGoBack()) webview.goBack();
    else super.onBackPressed();
 }
 }

但我的 LoadUrl 行出现此错误: 此行有多个标记 - 语法错误,插入“AssignmentOperator Expression”完成 表达 - 语法错误,插入“;”完成 FieldDeclaration - 语法错误,插入“)”完成MethodInvocation - 语法错误,插入“}”完成ClassBody - 语法错误,插入“;”完成声明 - 标记的语法错误,错误的构造

【问题讨论】:

    标签: android url browser webview


    【解决方案1】:

    这样使用

        @Override
    public void onCreate(Bundle savedInstanceState)
    {
    super.onCreate(savedInstanceState);
    this.getWindow().requestFeature(Window.FEATURE_PROGRESS);
    setContentView(R.layout.main);
    webview = (WebView) findViewById(R.id.webview);
    webview.getSettings().setJavaScriptEnabled(true);
    webview.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
    webview.getSettings().setSupportMultipleWindows(true);
    webview.getSettings().setPluginsEnabled(true);
    
     webview.setWebChromeClient(new WebChromeClient() {
        public void onProgressChanged(WebView view, int progress)
        {
            activity.setTitle("Loading...");
            activity.setProgress(progress * 100);
    
            if(progress == 100)
                activity.setTitle(R.string.app_name);
        }
     });
    
    
    
     webview.setWebViewClient(new WebViewClient() {
    
    
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url)
        {
            view.loadUrl(url);
            return true;
    
        }
     });
    
     webview.setWebChromeClient(new WebChromeClient(){
       public boolean shouldOverrideUrlLoading(WebView view, String url) {
           if (url != null && url.startsWith("http://")) {
               view.getContext().startActivity(
                   new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
               return true;
           } else {
               return false;
           }
       }
    
    
      });
    
    webview.loadUrl("http://www.sherdle.com/apphosting/dd");
    
    
     }
    
     @Override
     public void onBackPressed (){
        if(webview.canGoBack()) webview.goBack();
        else super.onBackPressed();
     }
    

    【讨论】:

    • 这个应该是这样的public class yourActivity extends Activity { above code }
    • 我仍然收到错误:此行有多个标记 - 上下文类型中的方法 startActivity(Intent) 不适用于参数 (Intent) - 行断点:WebPageLoader [行:54] - shouldOverrideUrlLoading (WebView, String) 以及:此行的多个标记 - Intent 无法解析为变量 - Uri 无法解析 - Intent 无法解析为类型
    • 它工作!谢谢!我还有一个问题:如果我想添加更多,那么一个 url 以...开头...如何?
    • 一个以上的 URL 是什么意思?你能解释一下吗?最好将它作为一个单独的问题发布。并接受答案,以便完成此问题..
    【解决方案2】:

    首先确保您的布局中有 webview。还要确保清单中有以下行。

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

    然后你将它添加到你的 onCreate 中。它可能不是最好的,但已经足够了。

    【讨论】:

    • 是的,我已经连接到互联网,并且我的 webview 已经可以正常工作了。但是我的 OneCreate 到底在哪里?你能把代码复制到我的java文件中吗?感谢您的帮助。
    【解决方案3】:

    抱歉,如果你已经重写了完全相同的方法,你怎么会不明白在哪里插入那段代码呢?看看它在哪里写的:

    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url)
    {
        view.loadUrl(url);
        return true;
    }
    

    如果你想改变上面的行为,只需替换第一个代码sn-p中指定的这两行即可。

    我感觉你并不真正理解 anonynous inner classes,因为你还尝试设置 WebChromeClient 两次 - 这真的没有意义。我建议你阅读一下这件事。

    此外,shouldOverrideUrlLoading(...) 方法由 WebViewClient 定义,而不是 WebChromeClient。这是一个简单查阅文档的案例。

    【讨论】:

      猜你喜欢
      • 2021-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-02
      • 2021-11-19
      • 2022-12-07
      • 2021-01-05
      • 1970-01-01
      相关资源
      最近更新 更多