【发布时间】:2013-04-06 23:02:32
【问题描述】:
经过一段时间的 bug 搜寻,结果是:
public class MainActivity extends BaseActivity { // BaseActivity extends Activity
public MainActivity() {
super();
getApplicationContext(); // NPE here
}
}
为什么?这是在哪里记录的?
果冻
【问题讨论】:
-
永远不要在活动上实现构造函数。
-
@CommonsWare:实际上是在
service上:D 注意提供一些输入-链接-源链接。无论如何,这不应该/不是记录在某处吗? -
“它实际上是在服务上”——您在上面粘贴的代码显示了一个实现构造函数的活动。 “无论如何,这不应该/不是记录在某处吗?” -- developer.android.com/reference/android/app/… "在活动开始时调用。这是大多数初始化应该去的地方:调用 setContentView(int) 来膨胀活动的 UI,使用 findViewById(int) 以编程方式与 UI 中的小部件交互,调用 managedQuery()检索光标以获取正在显示的数据等。”
-
不,不是问题。任何方法都可以抛出 NullPointerException,它不必声明。而且,即使它返回 null 而不是抛出 NullPointerException,当您稍后尝试使用所述 null 值时,您最终也会自己抛出异常。顺便说一句,返回 null 和抛出 NPE 在概念上是不同的。
-
@dmon:我知道 - 不,我认为这种行为是违反直觉的。一个方法不应该抛出一个未经检查的异常,除了 A) 如果它有一个错误或 B) 一个人以错误的方式使用它 - 但是这个 wrong way 应该在文档中 - 就像在大多数 api 中一样java中的类(如果参数为null等,则抛出NPE)-我通常检查null,所以我(可能)不会因为null返回值而落入(我知道它与NPE不同!)
标签: android constructor nullpointerexception android-context