首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Android: getContext().getContentResolver()有时会得到NullPointerException

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

Stack Overflow用户
提问于 2015-10-07 10:41:14
回答 6查看 14.1K关注 0票数 12

我想问为什么我们会得到这样的注释:

方法调用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?或者我们可以用什么方法解决它?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2015-10-08 20:13:38

如果您查看ContentProvider的源代码(只需按住SHIFT并单击Android中的类名),那么您将发现实现保存了一个上下文类型为mContext的对象。

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

为了帮助您解决问题,这只是对您的IDE的警告,如果您自己创建这样的结构的话。但在这种情况下,将始终存在上下文,因为ContentProvider是由您的系统生成的。为了避免IDE中的错误,只需在类定义之上编写@SuppressWarnings("ConstantConditions"),如下所示:

代码语言:javascript
运行
复制
...
@SuppressWarnings("ConstantConditions")
public class NoteProvider extends ContentProvider {
...
票数 9
EN

Stack Overflow用户

发布于 2015-10-07 10:52:44

如果您能够确保getContext()永远不会为null,那么只需忽略这个警告。我想你的警告甚至消失了,只要检查一下空:

代码语言:javascript
运行
复制
if (getContext() != null) {
    getContext().getContentResolver();
}

您只需记住,如果getContext()为null,代码就不会执行。

干杯

编辑:请小心回答@Shivani Gupta给您的答案,因为您可能会得到不同的上下文。请参阅:Difference between getContext() , getApplicationContext() , getBaseContext() and "this"

票数 8
EN

Stack Overflow用户

发布于 2015-10-07 10:51:45

getApplicationContext().getContentResolver()希望这会成功。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32990098

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档