onCreate和构造函数

hzgmm 2012-12-19 11:14:05
在一个继续Activity的类中,不能同时让onCreate和构造函数同时出现吗??

如果不能,原因为何?

如果能,为什么会出现错误?

12-19 02:33:10.343: E/AndroidRuntime(10398): FATAL EXCEPTION: main
12-19 02:33:10.343: E/AndroidRuntime(10398): java.lang.IllegalStateException: System services not available to Activities before onCreate()
12-19 02:33:10.343: E/AndroidRuntime(10398): at android.app.Activity.getSystemService(Activity.java:3989)

应该怎样解决?
...全文
592 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
牧仁童 2013-12-27
  • 打赏
  • 举报
回复
此贴不错呀 ,我也遇到过同样的问题了,一直找不到解决办法,现在有些明白了。
HappyDelano 2012-12-19
  • 打赏
  • 举报
回复
构造方法是运行的,只是通常不这么用。 目测你的程序应该是第11行出的错 popuWindowAdapter = new ArrayAdapter<String>(this, R.layout.spinner_own_model, arrModeList); 在这一行中,你的this应该指的的是SecondActivity.this 而在此时,SecondActivity还没有执行过onCreat()方法,也就是报错信息所说的System services not available to Activities before onCreate()。所有建议你把那个this换成context,就是你在构造方法里面传进来的那个context对象(this.context)试试。
hzgmm 2012-12-19
  • 打赏
  • 举报
回复
引用 8 楼 roger_ding 的回复:
构造函数和onCreate当然没有任何联系,它们只是程序执行过程中的先后次序而已,而你在开始的过程中使用了后来过程的数据,能不出错吗
嗯,谢谢大家的热情解答。是我自己在写代码的时候,把一些变量什么的搞混弄乱了。
roger_ding 2012-12-19
  • 打赏
  • 举报
回复
构造函数和onCreate当然没有任何联系,它们只是程序执行过程中的先后次序而已,而你在开始的过程中使用了后来过程的数据,能不出错吗
hzgmm 2012-12-19
  • 打赏
  • 举报
回复
引用 4 楼 roger_ding 的回复:
java.lang.IllegalStateException: System services not available to Activities before onCreate() 这个错误说的还不够详细吗 意思是在构造函数(就是onCreate之前)里调用了一些Activity的方法,但是由于onCreate还没有执行过,所以System service……
但是,我的构造函数和onCreate几乎是没有任何联系的...
hzgmm 2012-12-19
  • 打赏
  • 举报
回复
引用 2 楼 coder_dai 的回复:
1.构造函数是java里的,oncreate是android里的回调函数,两者没有直接联系。 2.你把你调用这两个函数的代码贴出来,帮你看看。
代码在5L,看有问题吗?
hzgmm 2012-12-19
  • 打赏
  • 举报
回复
在FirstActivity中,我要生成SecondActivity对象的引用

SecondActivitymode = new SecondActivity(this); 
			mode.showModeWindow();
在SecondActivity中代码:


	public SecondActivity(Context mContext) {
		this.context = mContext;
		initModeWindow();
	}
	private void initModeWindow() {
		layoutInflater = LayoutInflater.from(context);
//		LayoutInflater layoutInflater = (LayoutInflater) (this).getSystemService(LAYOUT_INFLATER_SERVICE);
		View popView = layoutInflater.inflate(R.layout.short_popupwindow_layout, null);
		lvModeWindow = (ListView) popView.findViewById(R.id.short_popuwindow_list_id);
		arrModeList = context.getResources().getStringArray(R.array.screen_mode);
		popuWindowAdapter = new ArrayAdapter<String>(this, R.layout.spinner_own_model, arrModeList);
		
		popWindow = new PopupWindow(popView, POPUPWINDOW_WIDTH,	LayoutParams.WRAP_CONTENT);
		lvPopuWindow.setAdapter(popuWindowAdapter);

		popWindow.setOutsideTouchable(true);
		popWindow.setFocusable(true);
		popWindow.setBackgroundDrawable(new BitmapDrawable());
		popWindow.update();
		if(null != modeWindow) {
			modeWindow.dismiss();
			return;
        }
	}
	
	public void showModeWindow(){
		View homeView = layoutInflater.inflate(R.layout.home_layout, null);
		popWindow.showAtLocation(homeView, Gravity.RIGHT | Gravity.TOP,	POPUP_OFFSET_X, POPUP_OFFSET_Y);
	}
protected void onCreate(Bundle savedInstanceState) {
//...
}
roger_ding 2012-12-19
  • 打赏
  • 举报
回复
java.lang.IllegalStateException: System services not available to Activities before onCreate() 这个错误说的还不够详细吗 意思是在构造函数(就是onCreate之前)里调用了一些Activity的方法,但是由于onCreate还没有执行过,所以System services 是无效的,而调用System services 是在Activity.java里android.app.Activity.getSystemService
luckyc2008 2012-12-19
  • 打赏
  • 举报
回复
我试了一下可以写构造函数的,我的构造函数里什么事情也没做,错误提示是:可能是你在构造函数做的事情要等到oncreate方法之后吧
vencent_dai 2012-12-19
  • 打赏
  • 举报
回复
1.构造函数是java里的,oncreate是android里的回调函数,两者没有直接联系。 2.你把你调用这两个函数的代码贴出来,帮你看看。
android_Y 2012-12-19
  • 打赏
  • 举报
回复
从来没试过使用构造函数
vencent_dai 2012-12-19
  • 打赏
  • 举报
回复
引用 6 楼 hzgmm 的回复:
引用 2 楼 coder_dai 的回复:1.构造函数是java里的,oncreate是android里的回调函数,两者没有直接联系。 2.你把你调用这两个函数的代码贴出来,帮你看看。 代码在5L,看有问题吗?
你重写了oncreate方法,里面却啥都没有,它当然报错了。目测把oncreate方法删掉可以解决。 楼主你是怎么解决的啊?

80,469

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧