2012-01-05 80 views
0

从字面上看,我所做的就是创建一个新项目。 import android.app.Activity; import android.content.ContentResolver; import android.os.Bundle; 公共类WebApp4Act extends活动{0}当首次创建活动时调用。 */ public static final Uri BOOKMARKS_URI = Uri.parse(“content:// browser/bookmarks”); 上下文context = getBaseContext(); ContentResolver cr = getContentResolver();为什么我无法创建内容解析器

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

当我运行它说,遗憾的是webApp4c已停止

如果我注释掉线 ContentResolver的CR = getContentResolver()的项目; 那么就没有问题 我想在设置为on版本14

+0

我忘了说我的项目SDK设置为3 – Martin 2012-01-05 11:41:29

+0

只是一个AVD使用sdk4又试了一次。仍然没有工作 – Martin 2012-01-05 11:55:51

回答

1

那答案非常简单,无需调用AVD运行此。不幸的是,getContentResolver()和任何其他需要Context的方法在应用程序构建过程或初始化过程中都无法这样做。在某些版本的AVD上,这个版本没有被正确地复制,所以这就是为什么它可以在某些版本的AVD上运行。你所要做的就是将你的代码移动到onCreate()(或任何其他在构建完成后运行的函数),你就会好起来的。

注:有办法通过一个自定义的视图或活动施工期间的信息,但有两点需要说明:

  1. 你不能在你的应用程序启动,且不会另一应用的第一组件这样做或应用组件给你...
  2. 这个CAN会导致不安全的代码。

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

附加说明(编辑):你实际上并不需要getBaseContext()那里。有几种Context和您的Activity作为一个。 getBaseContext()最适合当您需要在Android生命周期之外传递或保留Context时使用。

希望这有助于 FuzzicalLogic

+0

@idiottiger和Fuzzical Logic非常感谢你,这已经修复它 – Martin 2012-01-05 12:01:07

+0

它可能是最好永远不会使用'getBaseContext()'! – slinden77 2013-06-08 15:18:07

+0

其实并非如此。事实上,谷歌建议在任何时候你需要一个没有getApplicationContext()的对象的生命周期时使用它。在很多情况下,getBaseContext()提供了一个ApplicationContext。但是,人们一致认为应该谨慎行事,并据此进行规划。 – 2013-06-08 22:41:44

2
Context context = getBaseContext(); 
ContentResolver cr = getContentResolver(); 

运行后onCreate方法或onCreate方法

相关问题