findViewById Исключение нулевого указателя

1

Дорогое сообщество,

Я пытаюсь получить дату с 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?

Если я буду кричать по шоссе неправильности, пожалуйста, дайте мне знать и направьте меня к правильному способу сделать это.

  • 0
    Разместить файл макета и полный метод onCreate ().
Теги:
datepicker
nullpointerexception
android-widget

3 ответа

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;
    } 
  • 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() ;
}
}
  • 0
    в этом случае может оказаться целесообразным проверить нулевой объект dp, перехватить или выдать исключение NullPointerException на месте использования объекта. Но в любом случае я не могу понять цель использования представления, которое не было создано
  • 1
    да, конечно ... он должен сделать это .. я не могу сделать все для него ...
Показать ещё 2 комментария
0

Вам необходимо зарегистрироваться в onClick-слушателе для DatePicker. Вы можете читать это  учебник.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню