android - 如何从 Android 中的 Bundle 加载 url

标签 android android-webview bundle

我无法使用从上一个 Activity 传递的链接加载页面。

代码如下

@Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_show_webpage);

    webView = (WebView) findViewById(R.id.webView);
    WebSettings webSettings = webView.getSettings();
    webSettings.setJavaScriptEnabled(true);
    /*Bundle b = getIntent().getExtras();
    String url = b.getString(DeviceDetails.URL_KEY);*/

    String url = getIntent().getStringExtra(DeviceDetails.URL_KEY);
    //String url = "http://google.pl/nexus/4";
    webView.setWebViewClient(new MyWebViewClient());
    webView.loadUrl(url);
}


private class MyWebViewClient extends WebViewClient {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        view.loadUrl(url);
        return true;
    }
}

所以,当我使用 String url="http://google.pl/nexus/4"时,一切似乎都很好。而且我完全确定我的 Activity 从 getIntent 获取了 url,因为我调试了它。

UPD1:

String inputUrl = detUrlEditText.getText().toString();
Intent intent = new Intent(DeviceDetails.this, ShowWebPageActivity.class);
Bundle extras = new Bundle();
extras.putString(URL_KEY, inputUrl);
intent.putExtras(extras);
startActivity(intent);

以前的 Activity 。保证能传url,因为我调试过。 toast 还在 ShowWebPageActivity 中显示传递的 url。

最佳答案

不要在方法 shouldOverrideUrlLoading() 中调用 view.loadUrl(url)

我在其他地方看到过这样做的例子,但我不明白为什么,这不应该是必要的。

shouldOverrideUrlLoading() 应在您处理 URL 且 WebView 不应加载它时返回 true,而在 WebView 应继续加载 URL 时返回 false。

如果您决定 WebView 应该打开一个不同于 URL 参数的页面,您可以调用 view.loadUrl(),例如.

下面是一个 WebViewClient 子类的例子:

private class MyWebViewClient extends WebViewClient {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {

        if (handleWithSystemBrowser(url)) {
           Uri webpage = Uri.parse(url);
           Intent intent = new Intent(Intent.ACTION_VIEW, webpage);
           if (intent.resolveActivity(getPackageManager()) != null) {
               startActivity(intent);
           }
           return true;   // tells WebView that we specifically handled the URL, so don't load it
        }

        return false;   // go ahead and load it in the WebView
    }

    private boolean handleWithSystemBrowser(String url) {

        // put your code here to check the URL
        // return true if you want the device browser to display the URL
        // return false if you want the WebView to load the URL
        .
        .
        .
    }
}

关于android - 如何从 Android 中的 Bundle 加载 url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30900209/

相关文章:

java - 如何在进度微调器中显示数字

android - 此代码在 android 2.2 中正常工作但不适用于 android 2.3 及更高版本

Xcode 7 错误 ITMS-90474 : "Invalid Bundle", 无法提交给 Apple

xcode - 如何在 Xcode 项目包中排除图像文件,有条件地用于发布版本?

java - Android 获取文件夹中的每个文件

Android Sdk 管理器无法下载任何源列表

java - 仅对连接字符串的一部分进行样式设置 (Android)

android - 仪器测试 WebView

android - 如何使用 fragment 在 Web View 中向后导航?

objective-c - IOS Framework trouble load 加载嵌入式资源plist文件