Android: java.lang.NullPointerException at android.graphics.Canvas.drawLine(Canvas.java:809) (可能与我的可绘制资源有关)

标签 android nullpointerexception drawable

我正在尝试构建一个包含 7 列和每列 24 个 TextView 的 subview 。

当我的 Activity 开始时出现异常,并且它在堆栈跟踪中的任何位置都没有我的包。

这是 24 个 TextView 中每个 View 的背景可绘制资源

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item><shape><solid android:color="#CCC"/></shape></item>
    <item android:top=".5pt" android:bottom=".5pt">
        <shape android:shape="line">
            <size android:height="1pt" android:color="#CCC" android:dashWidth="1pt" android:dashGap="1pt" />
        </shape>
    </item>
</layer-list>

在此之前,CPU 会达到 100% 一两秒。

我正在使用 Android 2.2 的模拟器

这是我的异常(exception)。

01-26 16:51:38.084: ERROR/AndroidRuntime(955): FATAL EXCEPTION: main
01-26 16:51:38.084: ERROR/AndroidRuntime(955): java.lang.NullPointerException
01-26 16:51:38.084: ERROR/AndroidRuntime(955):     at android.graphics.Canvas.drawLine(Canvas.java:809)
01-26 16:51:38.084: ERROR/AndroidRuntime(955):     at android.graphics.drawable.GradientDrawable.draw(GradientDrawable.java:347)
01-26 16:51:38.084: ERROR/AndroidRuntime(955):     at android.graphics.drawable.LayerDrawable.draw(LayerDrawable.java:320)
01-26 16:51:38.084: ERROR/AndroidRuntime(955):     at android.view.View.draw(View.java:6725)
01-26 16:51:38.084: ERROR/AndroidRuntime(955):     at android.view.ViewGroup.drawChild(ViewGroup.java:1640)
01-26 16:51:38.084: ERROR/AndroidRuntime(955):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1367)
01-26 16:51:38.084: ERROR/AndroidRuntime(955):     at android.view.ViewGroup.drawChild(ViewGroup.java:1638)
01-26 16:51:38.084: ERROR/AndroidRuntime(955):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1367)
01-26 16:51:38.084: ERROR/AndroidRuntime(955):     at android.view.ViewGroup.drawChild(ViewGroup.java:1638)
01-26 16:51:38.084: ERROR/AndroidRuntime(955):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1367)
01-26 16:51:38.084: ERROR/AndroidRuntime(955):     at android.view.ViewGroup.drawChild(ViewGroup.java:1638)
01-26 16:51:38.084: ERROR/AndroidRuntime(955):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1367)
01-26 16:51:38.084: ERROR/AndroidRuntime(955):     at android.view.View.draw(View.java:6846)
01-26 16:51:38.084: ERROR/AndroidRuntime(955):     at android.widget.FrameLayout.draw(FrameLayout.java:352)
01-26 16:51:38.084: ERROR/AndroidRuntime(955):     at android.view.View.buildDrawingCache(View.java:6502)
01-26 16:51:38.084: ERROR/AndroidRuntime(955):     at android.view.ViewGroup.onAnimationStart(ViewGroup.java:1253)
01-26 16:51:38.084: ERROR/AndroidRuntime(955):     at android.view.ViewGroup.drawChild(ViewGroup.java:1499)
01-26 16:51:38.084: ERROR/AndroidRuntime(955):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1367)
01-26 16:51:38.084: ERROR/AndroidRuntime(955):     at android.view.ViewGroup.drawChild(ViewGroup.java:1638)
01-26 16:51:38.084: ERROR/AndroidRuntime(955):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1367)
01-26 16:51:38.084: ERROR/AndroidRuntime(955):     at android.view.View.draw(View.java:6743)
01-26 16:51:38.084: ERROR/AndroidRuntime(955):     at android.view.ViewGroup.drawChild(ViewGroup.java:1640)
01-26 16:51:38.084: ERROR/AndroidRuntime(955):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1367)
01-26 16:51:38.084: ERROR/AndroidRuntime(955):     at android.view.View.draw(View.java:6743)
01-26 16:51:38.084: ERROR/AndroidRuntime(955):     at android.widget.FrameLayout.draw(FrameLayout.java:352)
01-26 16:51:38.084: ERROR/AndroidRuntime(955):     at android.view.ViewGroup.drawChild(ViewGroup.java:1640)
01-26 16:51:38.084: ERROR/AndroidRuntime(955):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1367)
01-26 16:51:38.084: ERROR/AndroidRuntime(955):     at android.view.View.draw(View.java:6743)
01-26 16:51:38.084: ERROR/AndroidRuntime(955):     at android.widget.FrameLayout.draw(FrameLayout.java:352)
01-26 16:51:38.084: ERROR/AndroidRuntime(955):     at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:1842)
01-26 16:51:38.084: ERROR/AndroidRuntime(955):     at android.view.ViewRoot.draw(ViewRoot.java:1407)
01-26 16:51:38.084: ERROR/AndroidRuntime(955):     at android.view.ViewRoot.performTraversals(ViewRoot.java:1163)
01-26 16:51:38.084: ERROR/AndroidRuntime(955):     at android.view.ViewRoot.handleMessage(ViewRoot.java:1727)
01-26 16:51:38.084: ERROR/AndroidRuntime(955):     at android.os.Handler.dispatchMessage(Handler.java:99)
01-26 16:51:38.084: ERROR/AndroidRuntime(955):     at android.os.Looper.loop(Looper.java:123)
01-26 16:51:38.084: ERROR/AndroidRuntime(955):     at android.app.ActivityThread.main(ActivityThread.java:4627)
01-26 16:51:38.084: ERROR/AndroidRuntime(955):     at java.lang.reflect.Method.invokeNative(Native Method)
01-26 16:51:38.084: ERROR/AndroidRuntime(955):     at java.lang.reflect.Method.invoke(Method.java:521)
01-26 16:51:38.084: ERROR/AndroidRuntime(955):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
01-26 16:51:38.084: ERROR/AndroidRuntime(955):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
01-26 16:51:38.084: ERROR/AndroidRuntime(955):     at dalvik.system.NativeStart.main(Native Method)

编辑

将 size 重命名为 stroke 消除了崩溃,但我没有得到虚线。我想要在可绘制对象的中间或底部有一条水平虚线。

最佳答案

发生崩溃是因为 GradientDrawable.mStrokePaint 为 null,这又是因为您没有指定 <stroke>在您的 XML 中。

改变 <size><stroke>将修复它,但您还需要将笔触颜色更改为与背景颜色不同,即:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item><shape><solid android:color="#CCC"/></shape></item>
    <item android:top=".5pt" android:bottom=".5pt">
        <shape android:shape="line">
            <stroke android:height="1pt" android:color="#FF000000" android:dashWidth="1pt" android:dashGap="1pt" />
        </shape>
    </item>
</layer-list>

关于Android: java.lang.NullPointerException at android.graphics.Canvas.drawLine(Canvas.java:809) (可能与我的可绘制资源有关),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4810694/

相关文章:

javascript - 如何在 MyAdapter 的 ListView 中添加广告

java - Android - 找不到 NullPointerException 的原因

android - 获取 View 的当前背景id

android - 带有设备自定义模型的 Django 推送通知

android - 找到屏幕尺寸后更改 FrameLayout 的尺寸

android - 安装apk文件时出现错误 "The package appears to be corrupt"

具有新数据绑定(bind)导入的 Android Studio 3.2.1 无法编译

java - Android java.lang.NullPointerException getActionBar()

Android 线性渐变绘制

android - 无法将@drawable/转换为可绘制对象