初始化对象的NullPointerException

时间:2016-11-22 08:25:08

标签: java android nullpointerexception

我正在处理我的第一个Android应用,我正试图在我的视图中添加spinner。通过查看Android开发者指南,我想出了如何将其添加到我的视图中,以及如何将项目实际添加到微调器。

除了我实际尝试添加项目时,弹出以下内容:

Java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Spinner.setAdapter(android.widget.SpinnerAdapter)' on a null object reference

正如您所看到的,我试图在微调器对象上运行.setAdapter()。通常,如果我在没有初始化微调器对象的情况下尝试这个,会发生这个错误,但我做了:

Spinner spinner = (Spinner) findViewById(R.id.where_spinner);
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.where_array, android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);

在我致电setContentView()之后,上面的代码全部被调用,因此不是问题。

一个像旋转器一样简单的东西怎么会让我这么麻烦呢?

感谢。

修改

在看到特定评论之后,我看到我忘了添加包含where_spinner的布局文件是用于对话框的布局。 where_spinner应该是可访问的,因为该布局中的任何其他对象也是。

1 个答案:

答案 0 :(得分:3)

您的-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context{ if ([keyPath isEqualToString:@"scanTrackingNumber"]){ NSLog(@"scanTrackingNumber Changed %@",change); NSLog(@"scan12335 %@",scanTrackingNumbers); } } spinner。如果在您使用null设置的活动视图层次结构中找不到视图,则Activity#findViewById()会返回空值,或者根本没有调用setContentView()

根据评论,setContentView()实际上是在对话视图层次结构中。在对话框的层次结构上调用where_spinner,而不是在活动上找到它。