【问题标题】:Why can't I create a content resolver为什么我不能创建内容解析器
【发布时间】:2012-02-03 05:46:36
【问题描述】:

实际上,我所做的只是创建一个新项目。 导入android.app.Activity; 导入 android.content.ContentResolver; 导入android.os.Bundle; 公共类 WebApp4Act 扩展 Activity { /** 在第一次创建活动时调用。 */ 公共静态最终 Uri BOOKMARKS_URI = Uri.parse("content://browser/bookmarks"); 上下文上下文 = getBaseContext(); ContentResolver cr = getContentResolver();

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main); 
}
}

当我运行该项目时,它说不幸的是 webApp4c 已停止

如果我注释掉该行 内容解析器 cr = getContentResolver(); 那么就没有问题了 我正在尝试在 AVD 集上运行它以在版本 14 上运行

【问题讨论】:

  • 我忘了说我已将项目sdk设置为3
  • 刚刚使用 sdk4 使用 AVD 再次尝试。还是不行

标签: android android-contentresolver


【解决方案1】:
Context context = getBaseContext();
ContentResolver cr = getContentResolver();

需要在onCreate 方法之后或onCreate 方法中调用

【讨论】:

    【解决方案2】:

    这个答案很简单。不幸的是,getContentResolver() 和任何其他需要 Context 的方法在应用程序构建过程或初始化期间无法这样做。在某些版本的 AVD 上,这没有被正确复制,所以这就是它在某些版本的 AVD 上工作的原因。您所要做的就是将您的代码移动到 onCreate() 内部(或任何其他在构造之后运行的函数),您会没事的。

    注意:有一些方法可以在构建期间传递自定义视图或活动此信息,但有两个警告:

    1. 如果没有另一个应用程序或应用程序组件将其提供给您,您无法对应用程序中启动的第一个组件执行此操作...
    2. 此 CAN 会导致不安全的代码。

    在大多数情况下,最好在 Android 生命周期内工作。如果您需要有关 Android 生命周期的一些信息,可以从 Android 文档或 Javadoc 中获取。

    附加说明(编辑):您实际上并不需要上面的getBaseContext()Context 有好几种,你的 Activity 算一种。 getBaseContext() 最适合在需要在 Android 生命周期之外传递或持有 Context 时使用。

    希望这会有所帮助, 模糊逻辑

    【讨论】:

    • @idiottiger 和 Fuzzical Logic 非常感谢你们解决了这个问题
    • 无论如何最好不要使用getBaseContext()
    • 实际上不是这样。事实上,谷歌建议在你需要一个没有getApplicationContext()的对象的生命周期之外的上下文时使用它。在许多情况下,getBaseContext() 提供了一个 ApplicationContext。但是,大家一致认为应该谨慎地这样做并相应地进行编程。
    • 其他用途及说明:见stackoverflow.com/questions/5458156/…
    猜你喜欢
    • 1970-01-01
    • 2010-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-08
    • 1970-01-01
    • 2018-10-21
    • 2012-10-02
    相关资源
    最近更新 更多