0

从字面上看,我所做的就是创建一个新项目。导入android.app.Activity;导入 android.content.ContentResolver;导入android.os.Bundle;public class WebApp4Act extends Activity { /** 首次创建活动时调用。*/ public static final Uri BOOKMARKS_URI = Uri.parse("content://browser/bookmarks"); 上下文上下文 = getBaseContext(); 内容解析器 cr = getContentResolver();

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

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

如果我注释掉 ContentResolver cr = getContentResolver(); 那么没有问题我正在尝试在 AVD 上运行它以在版本 14 上运行

4

2 回答 2

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

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

于 2012-01-05T11:47:10.950 回答
1

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

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

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

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

附加说明(编辑):您实际上并不需要getBaseContext()那里。有几种Context,你Activity算一种。getBaseContext()最适合用于需要通过或持有ContextAndroid 生命周期之外的情况。

希望这会有所帮助, FuzzicalLogic

于 2012-01-05T11:50:44.957 回答