Android:getContext().getContentResolver()有时会获得NullPointerException

Rad*_*k O 9 java android nullpointerexception android-contentresolver

我想问为什么我们得到这个注释:

方法调用getContext.getContentResolver()可能会产生NullPointerException

为什么它在那里而不是在程序碎片/活动的其他部分?这种方法已在Google制作的教程中使用 - 这里是ContentProvider代码的链接https://github.com/udacity/Sunshine-Version-2/blob/sunshine_master/app/src/main/java/com/example/android /sunshine/app/data/WeatherProvider.java即使您只使用空白活动创建一个应用程序,并将该方法放在新创建的ContentProvider中,它就在那里.

我们应该使用getContext().getContentResolver().notifyChange(uri, null);外部ContentProvider获取uri传递,然后更新/插入/删除完成notifyChange?或者我们可以以某种方式解决它?

Mat*_*ate 9

如果您查看ContentProvider的源代码(只需按住SHIFT并单击Android Studio中的类名),您就会发现该实现持有一个Context类型的对象作为mContext.

您的解决方案是相同的,这意味着如果ContentProvider的mContext为null,您的引用也将为null.所以没有必要这样做.

为了帮助您,这只是您的IDE的警告,如果您自己制作这样的构造.但在这种情况下,总会有上下文,因为ContentProvider是由您的系统生成的.为了避免IDE中的错误,只需在类定义上面编写@SuppressWarnings("ConstantConditions"),如:

...
@SuppressWarnings("ConstantConditions")
public class NoteProvider extends ContentProvider {
...
Run Code Online (Sandbox Code Playgroud)


小智 7

如果你可以确保getContext()永远不能为null,那么你可以简单地忽略这个警告.我认为警告甚至会消失,你只需检查null:

if (getContext() != null) {
    getContext().getContentResolver();
}
Run Code Online (Sandbox Code Playgroud)

您必须记住,如果getContext()null,则不会执行代码.

干杯

编辑:小心@Shivani Gupta给你的答案,因为你可以得到不同的背景.请参阅:getContext(),getApplicationContext(),getBaseContext()和"this"之间的区别