我从我的应用程序中得到一个空指针异常。
我不知道哪个班级正在解雇这个例外。这个崩溃发生在我的一个客户的运行时间。他一直在报告这个问题,最后我整合了 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)
任何人遇到类似问题,请更新我。任何人有任何解决方案,请更新我。
答案 0 :(得分:2)
您在代码中使用ArrayAdapter
,ArrayAdapter
遍历给定数组并在每个对象上调用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,谢谢你的评论。这有助于我解决问题。