【问题标题】:Webview crashes when displaying a youtube video显示 youtube 视频时 Webview 崩溃
【发布时间】:2017-10-23 10:05:19
【问题描述】:

更新到 8.0 后,我们遇到了迄今为​​止我们从未见过的崩溃:

java.lang.NullPointerException: Attempt to invoke virtual method 'int android.graphics.Bitmap.getWidth()' on a null object reference
                                                                 at com.android.webview.chromium.WebViewContentsClientAdapter.getDefaultVideoPoster(WebViewContentsClientAdapter.java:536)
                                                                 at org.chromium.android_webview.DefaultVideoPosterRequestHandler$1.run(DefaultVideoPosterRequestHandler.java:2)
                                                                 at android.os.Handler.handleCallback(Handler.java:789)
                                                                 at android.os.Handler.dispatchMessage(Handler.java:98)
                                                                 at android.os.Looper.loop(Looper.java:164)
                                                                 at android.app.ActivityThread.main(ActivityThread.java:6541)
                                                                 at java.lang.reflect.Method.invoke(Native Method)
                                                                 at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
                                                                 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)

这是 Chrome 中的错误吗?

【问题讨论】:

  • 您使用的对象为空。使用 bitmap.getConfigurations();如果能分享一些代码就更好了
  • 没有代码。这一切都在一个网络视图中。
  • 有同样的问题。大多出现在装有 Android 8.0 的 Nexus/Pixel 设备上(((
  • 检查答案,它可能对我有帮助。

标签: android webview android-8.0-oreo


【解决方案1】:

感谢@breakline 的回答,我解决了这个问题!谢谢! 但我没有使用解码位图,而是创建一个空的并返回:

    setWebChromeClient(new WebChromeClient() {
        @Override
        public Bitmap getDefaultVideoPoster() {
            return Bitmap.createBitmap(50, 50, Bitmap.Config.ARGB_8888);
        }
    });

【讨论】:

    【解决方案2】:

    任何仍然想知道而不是在这里投反对票的人是对此的实际解决方案。因为我花了很多时间,所以我会在这里发布。

    您需要将以下内容添加到您的 WebChromeClient 中:

    webview.setWebChromeClient(new WebChromeClient() {
            @Override
            public Bitmap getDefaultVideoPoster() {
                Bitmap icon = BitmapFactory.decodeResource(context.getResources(), R.drawable.black);
                return icon;
            }
        });
    

    只要是实际的 PNG 文件,任何可绘制对象都可以。如果你使用 drawable/xml 你仍然会得到一个异常。

    【讨论】:

    • 哇!你救了我!! +1
    • 我在中国手机OUKITEL K10000上遇到了这个问题,这在我的目标受众(TA)中非常罕见。可能的原因之一是 AOSP 的自定义,但它通常会影响视频、声音或网络层。就我而言,我的用户根本不应该使用视频。
    猜你喜欢
    • 2014-10-24
    • 1970-01-01
    • 2019-07-14
    • 2011-11-07
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多