【问题标题】:Null Pointer Exception without package name Or class Name没有包名或类名的空指针异常
【发布时间】:2016-09-19 09:06:15
【问题描述】:

我的应用程序出现空指针异常。

我不知道,哪个类触发了这个异常。这次崩溃发生在我的一位客户的运行时。他不断报告这个问题,最后我集成了 Fabrics- Crash lytics。然后我得到了这个错误日志。但它没有提到我的包名或类名。

我在我的应用程序中的所有 Object.toString() 之前添加了一个空检查。但是这个问题仍然存在。我希望这个问题来自某个图书馆。

我在整个项目中使用了 10 个 ArrayAdapter。

三星报告了此问题 - SMT5550 - OS -6.0.1

请查看错误日志

Exception: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.Object.toString()' on a null object reference
       at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:401)
       at android.widget.ArrayAdapter.getView(ArrayAdapter.java:369)
       at android.widget.AbsListView.obtainView(AbsListView.java:2937)
       at android.widget.ListView.measureHeightOfChildren(ListView.java:1305)
       at android.widget.ListView.onMeasure(ListView.java:1212)
       at android.view.View.measure(View.java:20214)
       at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6333)
       at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
       at android.view.View.measure(View.java:20214)
       at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6333)
       at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1464)
       at android.widget.LinearLayout.measureVertical(LinearLayout.java:747)
       at android.widget.LinearLayout.onMeasure(LinearLayout.java:629)
       at android.view.View.measure(View.java:20214)
       at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6333)
       at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
       at android.view.View.measure(View.java:20214)
       at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6333)
       at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
       at android.view.View.measure(View.java:20214)
       at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6333)
       at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
       at com.android.internal.policy.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:3083)
       at android.view.View.measure(View.java:20214)
       at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2683)
       at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1611)
       at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1928)
       at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1524)
       at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7520)
       at android.view.Choreographer$CallbackRecord.run(Choreographer.java:911)
       at android.view.Choreographer.doCallbacks(Choreographer.java:686)
       at android.view.Choreographer.doFrame(Choreographer.java:622)
       at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:897)
       at android.os.Handler.handleCallback(Handler.java:739)
       at android.os.Handler.dispatchMessage(Handler.java:95)
       at android.os.Looper.loop(Looper.java:148)
       at android.app.ActivityThread.main(ActivityThread.java:7325)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)

有人遇到过类似的问题,求更新。任何人有任何解决方案请更新我。

【问题讨论】:

  • 如果没有看到代码,恐怕我们无法帮助您。请尝试生成MCVE 并发布。那么,我们或许可以为您提供帮助。
  • 它表示您正在尝试将某些内容转换为字符串,并且该对象是NULL。可能在您代码中的某个适配器中。解释您在做什么以及何时发生此崩溃。请提供一些代码。
  • 您能否检查您的适配器代码以查看列表视图并在此处发布相同的代码
  • 将您的适配器代码放在这里以获得更好的帮助
  • 你的班级叫什么名字?

标签: java android android-studio nullpointerexception


【解决方案1】:

您在代码中使用ArrayAdapterArrayAdapter 遍历给定数组并在每个对象上调用toString。 确保传递给 ArrayAdapter 的数组不包含任何 null 元素。

【讨论】:

    【解决方案2】:

    ArrayAdapter.java:401,是什么引发了这个错误。 检查传递给此方法的对象中添加的值。其中一个可能是空的。 android.os.Looper.loop(Looper.java:148)

    【讨论】:

    • ArrayAdapter.java:401,是什么引发了这个错误。这不是他的代码...... 检查传递给这个的对象中添加的值方法。 哪种方法? ArrayAdapter.java 随着时间的推移发生了变化......很难找出他的客户端 android 实现中使用了哪个版本的文件......可能其中一个是空的谢谢队长明显
    • 阅读评论。检查传递给此方法的值。提到了方法。 android.os.Looper.loop(Looper.java:148)。兄弟,没必要太聪明了。
    • 提到的方法。在哪里? android.os.Looper.loop(Looper.java:148) ?是内部 android 消息循环,他没有自己调用它... 无需过度智能 ...过度智能?只有当“回答”毫无意义时才会显得过于聪明...... 兄弟 ...我不是你的兄弟
    • android.os.Looper.loop(Looper.java:148),这是循环值的方法。他的堆栈跟踪在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) 结束。问这个问题的人知道在他的代码中的确切位置,他将值传递给 Looper(隐式)。还是很模糊吗?
    • android.os.Looper.loop(Looper.java:148),这是循环值的方法。 ...似乎缺乏基础知识(如何读取堆栈跟踪)...这是一个主要问题at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:401) at android.widget.ArrayAdapter.getView(ArrayAdapter.java:369)...显然是因为传递给适配器构造函数的数组元素之一为空... android.os.Looper.loop 被系统内部调用以进行绘制框架
    【解决方案3】:

    最后,我在我的代码库中发现了问题。

    我的代码中已经有一个 BLE 模块。 BLE 模块包含一个 BLE 扫描部分。扫描部分将扫描最近的可用 BLE 并获取设备对象。该对象包含设备名称和设备地址。

    在我的实现中,我添加了一个带有单选项目的警报对话框,并将所有可用的 BLE 作为字符串数组列表传递。

    但问题发生在运行时,一旦用户断开一个 BLE 并尝试随机连接另一个 BLE,设备名称将返回为 null。所以我将一个空对象传递给警报对话框。
    这是 BLE 的问题。

    请参考:android BluetoothDevice.getName() return null

    这就是我得到空指针异常的原因

    Exception: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.Object.toString()' on a null object reference
    

    现在我在扫描 BLE 对象接收部分添加了一个空检查。现在这个问题已经解决了。

    @覆盖 public void onScanResult(int callbackType, ScanResult result) { super.onScanResult(callbackType, result);

            if (result != null && result.getDevice() != null && result.getDevice().getAddress() != null) {
                if (null != mOnDeviceScanListener) {
                    BleDeviceData data = new BleDeviceData();
                    data.setDeviceName(result.getDevice().getName() != null ? result.getDevice().getName() : "Unknown");
                    data.setDeviceAddress(result.getDevice().getAddress());
                    boolean isSame = false;
                    for (BleDeviceData deviceData : mDeviceList) {
                        if (deviceData.getDeviceAddress().equalsIgnoreCase(data.getDeviceAddress())) {
                            // Neglect the ID
                            isSame = true;
                        }
                    }
                    if (!isSame) {
                        mDeviceList.add(data);
                    }
                }
            }
        }
    

    问题在于对话实现。即感到困惑。

    @Marmor,感谢您的评论。这有助于我解决问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-12
      相关资源
      最近更新 更多