尝试在空对象引用上调用虚拟方法 'android.graphics.Rect android.graphics.drawable.Drawable.getBounds()'
Posted
技术标签:
【中文标题】尝试在空对象引用上调用虚拟方法 \'android.graphics.Rect android.graphics.drawable.Drawable.getBounds()\'【英文标题】:Attempt to invoke virtual method 'android.graphics.Rect android.graphics.drawable.Drawable.getBounds()' on a null object reference尝试在空对象引用上调用虚拟方法 'android.graphics.Rect android.graphics.drawable.Drawable.getBounds()' 【发布时间】:2020-02-09 18:59:56 【问题描述】:我有以下代码:
etEmail.setOnTouchListener((view, motionEvent) ->
final int DRAWABLE_RIGHT = 2;
if (motionEvent.getAction() == MotionEvent.ACTION_UP)
if(motionEvent.getRawX() >= (etEmail.getRight() - etEmail.getCompoundDrawables()[DRAWABLE_RIGHT].getBounds().width()))
Utils.getInstance().showPopup("...",MainActivity.this,null);
return true;
return false;
);
虽然通常它似乎有效,但我突然收到一份崩溃分析报告:
尝试调用虚拟方法'android.graphics.Rect android.graphics.drawable.Drawable.getBounds()' 在一个空对象上 参考
适用于品牌:小米,型号:Redmi Note 6 Pro,Android:9。
这里有没有人知道什么会导致drawable“消失”或被视为null?
XML 布局:
<EditText
android:id="@+id/etEmail"
tools:ignore="Autofill"
android:inputType="textEmailAddress"
android:layout_
android:layout_
android:drawableEnd="@drawable/ic_info"
android:paddingEnd="12dp"
android:paddingStart="10dp"
android:textAppearance="@style/TextAppearance.AppCompat.Medium" />
【问题讨论】:
你知道drawable是否显示了吗? 我不知道,它来自用户 【参考方案1】:在您的 xml 中,它说 drawableEnd 而在您的代码中,您假设它是右侧的可绘制对象。我感觉崩溃发生在使用 RTL 语言的设备上(意思是,drawable 将在左侧)。
【讨论】:
【参考方案2】:在 crashlytics 中,检查崩溃是发生在后台还是前台。如果它在后台很可能编辑文本被破坏,因此你得到了 npe(例如,用户在释放手指之前接到了一个电话)。 如果没有,更多的流程细节将有助于找出问题。
【讨论】:
由于某种原因,它从 Crashlytics 中消失了。你说的背景或前景是什么意思?崩溃发生在同一个用户身上 3-4 次,所以除非他接到很多电话...... :) 有一个带有电子邮件文本编辑的登录窗口,带有一个图标(可绘制),以便在单击时显示更多信息。用户点击它(setontouch ...)并获得了NPE。谢谢! Crashlytics 仪表板通常指定崩溃是否在应用可见时发生。这是在特定的崩溃统计信息中 - 显示后台事件的百分比。如果它是 100% 背景,则意味着崩溃仅在应用程序不可见时发生。如果它在应用程序可见时也发生,您应该检查它可能发生的情况。无论如何,如果它仅在应用程序不可见时发生,则空检查应该解决它。 感谢您的提示,您能告诉我崩溃统计数据中的哪个位置吗?我没找到。 好的,找到了,0% 背景 好的,这是有道理的,因为我现在看到问题与 RTL 配置有关,该配置必须在应用程序可见时发生。现在您还知道如何检测用户流程中何时发生崩溃。以上是关于尝试在空对象引用上调用虚拟方法 'android.graphics.Rect android.graphics.drawable.Drawable.getBounds()'的主要内容,如果未能解决你的问题,请参考以下文章
尝试在空对象引用上调用虚拟方法 'android.graphics.Rect android.graphics.drawable.Drawable.getBounds()'
尝试在空对象引用上调用虚拟方法 'android.view.Window$Callback android.view.Window.getCallback()'
尝试在空对象引用上调用虚拟方法 'android.os.Handler android.support.v4.app.FragmentHostCallback.getHandler()'
尝试在空对象引用上调用虚拟方法 'void android.view.View.measure(int, int)'