1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

DatePickerDialog funktioniert nicht

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von Otmar_Schramm, 04.03.2012.

  1. Otmar_Schramm, 04.03.2012 #1
    Otmar_Schramm

    Otmar_Schramm Threadstarter Neuer Benutzer

    Beiträge:
    11
    Erhaltene Danke:
    0
    Registriert seit:
    12.01.2012
    Hallo,
    ich beschäftige mich gerade mit dem Android für Dummies....
    Beim Terminplaner streikt das Programm beim DatePickerDialog.
    Die App stürzt immer ab beim Klick auf ein showDatePicker-Button

    Code:
    private DatePickerDialog showDatePicker() {
             DatePickerDialog datePicker = new DatePickerDialog(ReminderEditActivity.this, new DatePickerDialog.OnDateSetListener() {
                @Override
                public void onDateSet(DatePicker view, int year, int monthOfYear,int dayOfMonth) {
                    mCalendar.set(Calendar.YEAR, year);
                    mCalendar.set(Calendar.MONTH, monthOfYear);
                    mCalendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);
                    updateDateButtonText();
                }
            }, mCalendar.get(Calendar.YEAR), mCalendar.get(Calendar.MONTH), mCalendar.get(Calendar.DAY_OF_MONTH));
            return datePicker; 
        }
    
    
    
    Danke für Infos
     
  2. snowman2, 04.03.2012 #2
    snowman2

    snowman2 Erfahrener Benutzer

    Beiträge:
    153
    Erhaltene Danke:
    18
    Registriert seit:
    07.12.2011
    Was sagt den LogCat dazu?
     
  3. Otmar_Schramm, 04.03.2012 #3
    Otmar_Schramm

    Otmar_Schramm Threadstarter Neuer Benutzer

    Beiträge:
    11
    Erhaltene Danke:
    0
    Registriert seit:
    12.01.2012
    Nun die erste Error Meldung ist eine
    NullPointerException und lautet:
    03-04 19:32:42.200: E/AndroidRuntime(23712): at de.otmar.terminplaner.ReminderEditActivity.showDatePicker(ReminderEditActivity.java:83

    Sie verzweigt auf die Zeile
    Code:
        }, mCalendar.get(Calendar.YEAR), mCalendar.get(Calendar.MONTH), mCalendar.get(Calendar.DAY_OF_MONTH));
    
    aus dem Quellcode.
     
  4. swordi, 04.03.2012 #4
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009
    und dein mcalendar ist initialisiert ? woher kommt der denn ?
     
  5. Otmar_Schramm, 04.03.2012 #5
    Otmar_Schramm

    Otmar_Schramm Threadstarter Neuer Benutzer

    Beiträge:
    11
    Erhaltene Danke:
    0
    Registriert seit:
    12.01.2012
    er kommt aus der gleichen Klasse mit:

    Code:
    private Calendar mCalendar;
    
    private static final String DATE_FORMAT = "dd.mm.yyyy";
    private static final String TIME_FORMAT = "kk:mm";
    
    
     
  6. Otmar_Schramm, 04.03.2012 #6
    Otmar_Schramm

    Otmar_Schramm Threadstarter Neuer Benutzer

    Beiträge:
    11
    Erhaltene Danke:
    0
    Registriert seit:
    12.01.2012
    Hier mal der komplette Code:

    Code:
    package de.otmar.terminplaner;
    
    import java.text.SimpleDateFormat;
    import java.util.Calendar;
    
    import android.app.Activity;
    import android.app.DatePickerDialog;
    import android.app.Dialog;
    import android.app.TimePickerDialog;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.widget.DatePicker;
    import android.widget.TimePicker;
    
    public class ReminderEditActivity extends Activity {
        private Button mDateButton;
        private Button mTimeButton;
        private static final int DATE_PICKER_DIALOG = 0;
        private static final int TIME_PICKER_DIALOG = 1;
        private Calendar mCalendar;
        private static final String DATE_FORMAT = "dd.mm.yyyy";
        private static final String TIME_FORMAT = "kk:mm";
        
        
        
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.reminder_edit);
            mDateButton = (Button) findViewById(R.id.reminder_date);
            mTimeButton = (Button) findViewById(R.id.reminder_time);
            
            if(getIntent() != null) {
                Bundle extras = getIntent().getExtras();
                int rowId = extras != null ? extras.getInt("RowId") : -1;
                //row hier verarbeiten
            }
            registerButtonListenersAndSetDefaultText();
            
        }
    
        private void registerButtonListenersAndSetDefaultText() {
            // TODO Auto-generated method stub
            mDateButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    showDialog(DATE_PICKER_DIALOG);
                }
            });
            
            mTimeButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    showDialog(TIME_PICKER_DIALOG);
                }
            });
            updateDateButtonText();
            updateTimeButtonText();
        }
        
        @Override
        protected Dialog onCreateDialog(int id) {
            switch(id) {
            case DATE_PICKER_DIALOG:
                return showDatePicker();
            case TIME_PICKER_DIALOG:
                return showTimePicker();
            }
            return super.onCreateDialog(id);
        }
    
        private DatePickerDialog showDatePicker() {
             DatePickerDialog datePicker = new DatePickerDialog(ReminderEditActivity.this, new DatePickerDialog.OnDateSetListener() {
                @Override
                public void onDateSet(DatePicker view, int year, int monthOfYear,int dayOfMonth) {
                    mCalendar.set(Calendar.YEAR, year);
                    mCalendar.set(Calendar.MONTH, monthOfYear);
                    mCalendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);
                    updateDateButtonText();
                }
            }, mCalendar.get(Calendar.YEAR), mCalendar.get(Calendar.MONTH), mCalendar.get(Calendar.DAY_OF_MONTH));
            return datePicker; 
        }
        private void updateDateButtonText() {
            SimpleDateFormat dateFormat = new SimpleDateFormat(DATE_FORMAT);
            String dateForButton = dateFormat.format(mCalendar.getTime());
            mDateButton.setText(dateForButton);
        }
        
        private TimePickerDialog showTimePicker() {
            TimePickerDialog timePicker = new TimePickerDialog(this, new TimePickerDialog.OnTimeSetListener() {
                
                @Override
                public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
                    // TODO Auto-generated method stub
                    mCalendar.set(Calendar.HOUR_OF_DAY, hourOfDay);
                    mCalendar.set(Calendar.MINUTE, minute);
                    updateTimeButtonText();
                    
                }
            }, mCalendar.get(Calendar.HOUR_OF_DAY), mCalendar.get(Calendar.MINUTE), true);
            return timePicker;
        }
    
        
        private void updateTimeButtonText() {
            // TODO Auto-generated method stub
            SimpleDateFormat timeFormat = new SimpleDateFormat(TIME_FORMAT);
            String timeForButton = timeFormat.format(mCalendar.getTime());
            mTimeButton.setText(timeForButton);
        }
    
    }
    
    
     
  7. snowman2, 04.03.2012 #7
    snowman2

    snowman2 Erfahrener Benutzer

    Beiträge:
    153
    Erhaltene Danke:
    18
    Registriert seit:
    07.12.2011
    Ich hätte irgendwo ein "mCalendar = new Calendar();" erwartet.
     
    Zuletzt bearbeitet: 04.03.2012
    swordi bedankt sich.
  8. Otmar_Schramm, 06.03.2012 #8
    Otmar_Schramm

    Otmar_Schramm Threadstarter Neuer Benutzer

    Beiträge:
    11
    Erhaltene Danke:
    0
    Registriert seit:
    12.01.2012
    Der fehlende Code war:

    mCalendar = Calendar.getInstance();

    danke euch!!
     

Diese Seite empfehlen