首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在webview中单击选择框时应用程序崩溃

在webview中单击选择框时应用程序崩溃
EN

Stack Overflow用户
提问于 2012-04-10 08:56:24
回答 2查看 3.5K关注 0票数 6

我在我的应用程序中使用webview。Webview是使用应用程序上下文创建的。单击任意选择框时应用程序崩溃

代码语言:javascript
运行
AI代码解释
复制
04-10 14:19:14.502: E/AndroidRuntime(12628): Uncaught handler: thread main exiting due to uncaught exception
04-10 14:19:14.542: E/AndroidRuntime(12628): android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application
04-10 14:19:14.542: E/AndroidRuntime(12628):    at android.view.ViewRoot.setView(ViewRoot.java:476)
04-10 14:19:14.542: E/AndroidRuntime(12628):    at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:177)
04-10 14:19:14.542: E/AndroidRuntime(12628):    at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
04-10 14:19:14.542: E/AndroidRuntime(12628):    at android.app.Dialog.show(Dialog.java:239)
04-10 14:19:14.542: E/AndroidRuntime(12628):    at android.webkit.WebView$InvokeListBox.run(WebView.java:9509)
04-10 14:19:14.542: E/AndroidRuntime(12628):    at android.os.Handler.handleCallback(Handler.java:609)
04-10 14:19:14.542: E/AndroidRuntime(12628):    at android.os.Handler.dispatchMessage(Handler.java:92)
04-10 14:19:14.542: E/AndroidRuntime(12628):    at android.os.Looper.loop(Looper.java:123)
04-10 14:19:14.542: E/AndroidRuntime(12628):    at android.app.ActivityThread.main(ActivityThread.java:4595)
04-10 14:19:14.542: E/AndroidRuntime(12628):    at java.lang.reflect.Method.invokeNative(Native Method)
04-10 14:19:14.542: E/AndroidRuntime(12628):    at java.lang.reflect.Method.invoke(Method.java:521)
04-10 14:19:14.542: E/AndroidRuntime(12628):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
04-10 14:19:14.542: E/AndroidRuntime(12628):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
04-10 14:19:14.542: E/AndroidRuntime(12628):    at dalvik.system.NativeStart.main(Native Method)

我很清楚这个问题已经被问了很多次了,但我还没有找到任何可行的解决方案。如果我使用活动上下文,这个问题将会得到解决,但由于其他一些考虑,我必须使用应用程序上下文。对于其他警告和对话框,我已经通过重写webchromeclient中的onJsAlert()来处理它们,但是我不能找到如何在我的webview中拦截它并创建我自己的选择器对话框。

任何类型的建议/帮助都非常感谢。

添加我的webview实现的虚拟示例

代码语言:javascript
运行
AI代码解释
复制
class MyWebView extends WebView
{

 MyWebView(Context context)
 {

    super(context.getApplicationContext());
    setWebChromeClient(myWebChromeClient);
    setWebViewClient(myWebViewClient);
 }
}
EN

回答 2

Stack Overflow用户

发布于 2014-02-21 15:40:12

这是因为您在创建WebView时传递的是应用程序上下文,而不是活动上下文。为了在Android中显示来自WebView的选择框,WebView在其构造函数中使用为其提供的上下文,并打开本机单选项选择器。要显示这个选择器对话框,它需要一个活动上下文,而不是应用程序的上下文。更改行:

代码语言:javascript
运行
AI代码解释
复制
super(context.getApplicationContext());

使用这一行:

代码语言:javascript
运行
AI代码解释
复制
super(context);

您还需要确保在创建web视图的活动中使用web视图(在不同的活动中使用它没有任何意义)。如果您需要在不同的活动中使用web视图,只需使用指定活动的上下文创建一个。

票数 3
EN

Stack Overflow用户

发布于 2012-04-10 09:13:05

我希望你在这种情况下使用extends Activity

只需参考一下here

如果你想在这之外使用webView,我有下面的代码。

代码语言:javascript
运行
AI代码解释
复制
mWebView.setWebViewClient(new WebViewClient() {
        @Override
        public void onReceivedError(WebView view, int errorCode,
                String description, String failingUrl) {
            // Handle the error
        }

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return true;
        }
    });
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10085753

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文