findViewById空指针异常

时间:2011-03-31 03:56:48

标签: android android-widget datepicker nullpointerexception

亲爱的Stack Overflow社区,

我正在尝试从datepicker获取日期并将其设置为代码位于onCreate方法之外的字符串。这是我的代码:

DatePicker dp =(DatePicker)findViewById(R.id.datePickerControl);
String date_picker_message= (dp.getMonth()+1) +"/"+dp.getDayOfMonth()+"/"+dp.getYear() ;

但是,当我尝试使用此代码时,它符合此错误但是崩溃了:

03-30 22:51:20.719:ERROR / AndroidRuntime(4954):引起:java.lang.NullPointerException

我认为可能是因为我没有设置内容视图,而我的代码正试图找到一个尚不存在的视图。但是我如何在onCreate方法之外执行此操作?

如果我在错误的高速公路上尖叫,请告诉我,并指导我采取正确的方法。

3 个答案:

答案 0 :(得分:3)

DatePicker dp =(DatePicker)findViewById(R.id.datePickerControl);

在你的班级中声明日期选择器...... 在create方法内部初始化它。 在任何你喜欢的地方使用它。

示例代码:

public class youractivity extends Activity {
DatePicker dp;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
  dp =(DatePicker)findViewById(R.id.datePickerControl);
}
private return_type yourmethod(Arguments)
{
 String date_picker_message= (dp.getMonth()+1) +"/"+dp.getDayOfMonth()+"/"+dp.getYear() ;
}
}

答案 1 :(得分:2)

感谢大家的回答!这个问题已经解决了。目标是获取日期选择器的值并在SQL WHERE语句中使用此值。我完全不喜欢随意放在代码中的变量,而使用这个变量的方法完全位于其他地方。对变量和使用它们的方法进行逻辑分组对我来说很有意义。

以下代码是我解决问题的方法。

    public void onClick(View v) {
    switch (v.getId()) {
    case R.id.show_events:
        try {
            DatePicker dp=(DatePicker)findViewById(R.id.datePickerControl);

            if ((dp.getMonth()+1) < 10) {

                String date_picker_value = "0"+( dp.getMonth()+1) +"/"+dp.getDayOfMonth()+"/"+dp.getYear();
                Cursor cursor = getEvents(date_picker_value);
                showEvents(cursor);
                Toast.makeText(view.this, date_picker_value, Toast.LENGTH_SHORT).show();
            }
            else {

                String date_picker_value = ( dp.getMonth()+1) +"/"+dp.getDayOfMonth()+"/"+dp.getYear();
                String date_picker_value="Showing events for: " + date_picker_value;
                Cursor cursor = getEvents(date_picker_value);
                showEvents(cursor);
                Toast.makeText(view.this, date_picker_value, Toast.LENGTH_SHORT).show();
            }


        }
        finally {
            events.close();
        }
        break;
    } 

答案 2 :(得分:0)

您应该为DatePicker注册onClick侦听器。你可以阅读this  教程。