没有包名称或类名

时间:2016-09-19 09:06:16

标签: java android android-studio nullpointerexception

我从我的应用程序中得到一个空指针异常。

我不知道哪个班级正在解雇这个例外。这个崩溃发生在我的一个客户的运行时间。他一直在报告这个问题,最后我整合了 Fabrics- Crash lytics 。然后我收到了这个错误日志。但它没有提到我的包名或类名。

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

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

此问题已在Samsung - 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)

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

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

ArrayAdapter.java:401,是抛出此错误的原因。 检查传递给此方法的对象中添加的值。可能其中一个是null。 android.os.Looper.loop(Looper.java:148)

答案 2 :(得分:0)

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

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

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

但问题发生在运行时,因为一旦用户断开一个BLE并尝试随机连接到另一个BLE,设备名称将返回null。所以我将一个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,谢谢你的评论。这有助于我解决问题。