findViewById Исключение нулевого указателя - PullRequest
1 голос
/ 31 марта 2011

Уважаемое сообщество переполнения стека,

Я пытаюсь получить дату из средства выбора даты и установить ее в виде строки с кодом, расположенным вне метода 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: ОШИБКА / AndroidRuntime (4954): вызвано: java.lang.NullPointerException

Я думаю, это может быть потому, что я не установил представление контента, и мой код пытается найти представление, которого еще не существует. Но как мне сделать это вне метода onCreate?

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

Ответы [ 3 ]

3 голосов
/ 31 марта 2011
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() ;
}
}
2 голосов
/ 01 апреля 2011

Спасибо всем за ответы!Проблема была решена с моей стороны.Цель состояла в том, чтобы получить значение средства выбора даты и использовать это значение в операторе 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 голосов
/ 31 марта 2011

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

...