java - Android 应用 NullPointerException 它不应该发生在哪里?
问题描述
我有一个最近发布的 Android 应用程序,并且我收到了来自 Google Play 控制台的崩溃报告。其中一次崩溃很奇怪。它发生在类似于以下的代码中:
private final List<Item> items = new ArrayList<>();
public void addItem(Item item) {
items.add(item); // NullPointerException here!!
}
显然在被调用items
时为空addItem
,但在我看来这是不可能的——我已经在声明站点初始化了它。我无法想象会发生这种情况的情况,但这种情况经常发生。任何的想法?
解决方案
好吧,精神调试时间。发生这种情况的唯一init { ... }
方法是,如果在设置其他变量或显式块期间,某些东西将其作为对象 init 的一部分进行调用。
你几乎可以肯定在代码的其他地方做这样的事情:
import java.util.*;
class Main {
private static class Item { }
private final Item firstItem = setUpItemsAndReturnFirst();
private final List<Item> items = new ArrayList<>();
public void addItem(Item item) {
items.add(item); // NullPointerException here!!
}
private Item setUpItemsAndReturnFirst() {
Item first = new Item();
Item second = new Item();
addItem(first);
addItem(second);
return first;
}
public static void main(String args[]) {
new Main();
}
}
这包含您的示例代码,并且会在该行上崩溃NullPointerException
,因为它在用于初始化时被setUpItemsAndReturnFirst()
初始化。items
firstItem
在你的情况下,我认为它背后有某种条件,因为它可能不会每次都崩溃,或者你永远不会释放它。但这是一般的想法。
推荐阅读
- c - 在 Erlang/Elixir 中用多个 png 文件组合 jpeg 图像
- jmeter - 我无法在 XMPP 服务器中使用 jmeter 进行负载测试,我已经添加了所有插件并给出了 xmpp 连接、用于连接登录的采样器以及所有
- python - 如何分组并执行自定义计算
- javascript - 是否可以使用 Cordova InAppBrowser 插件在位置栏上显示证书信息?
- c++ - 如何调用从 C++ 导入的包中定义的 julia 方法?
- c++ - YAML::LoadFile(std::string const&) 找不到文件 [ROS 中的 yaml-cpp]
- html - 如何从数据库中获取数据到文本框打字稿
- sqlite - React Native - SQLite 找不到预填充的数据库文件
- sql-server - 相关的多个更新语句中的死锁
- r - 在不使用 Docker 的情况下,无法在 R 中使用 RSelenium 包打开 Gecko 驱动程序