我想问为什么我们会得到这样的注释:
方法调用getContext.getContentResolver()可以生成NullPointerException
为什么它在那里而不是在程序片段/活动的其他部分?谷歌制作的教程中使用了这种方法--这是ContentProvider代码master/app/src/main/java/com/example/android/sunshine/app/data/WeatherProvider.java的链接,即使您只使用一个空白的活动创建一个折叠,并将该方法放入一个新创建的ContentProvider中,它就在这里。
我们是否应该在getContext().getContentResolver().notifyChange(uri, null);
之外使用ContentProvider来传递uri,然后在更新/插入/删除完成之后,notifyChange?或者我们可以用什么方法解决它?
发布于 2015-10-08 20:13:38
如果您查看ContentProvider的源代码(只需按住SHIFT并单击Android中的类名),那么您将发现实现保存了一个上下文类型为mContext的对象。
您的解决方案是完全相同的,这意味着如果mContext of ContentProvider为null,则引用也将为null。所以没有必要这样做。
为了帮助您解决问题,这只是对您的IDE的警告,如果您自己创建这样的结构的话。但在这种情况下,将始终存在上下文,因为ContentProvider是由您的系统生成的。为了避免IDE中的错误,只需在类定义之上编写@SuppressWarnings("ConstantConditions"),如下所示:
...
@SuppressWarnings("ConstantConditions")
public class NoteProvider extends ContentProvider {
...
发布于 2015-10-07 10:52:44
如果您能够确保getContext()永远不会为null,那么只需忽略这个警告。我想你的警告甚至消失了,只要检查一下空:
if (getContext() != null) {
getContext().getContentResolver();
}
您只需记住,如果getContext()为null,代码就不会执行。
干杯
编辑:请小心回答@Shivani Gupta给您的答案,因为您可能会得到不同的上下文。请参阅:Difference between getContext() , getApplicationContext() , getBaseContext() and "this"
发布于 2015-10-07 10:51:45
写getApplicationContext().getContentResolver()
希望这会成功。
https://stackoverflow.com/questions/32990098
复制相似问题