Я новичок в Android Studio и Android разработке, но с некоторыми онлайн-запросами я написал класс для обработки запросов DatePickerDialog и TimePickerDialog для установки даты.
На основе Например, я написал класс:
class DatePick
{
protected android.app.Activity activity;
public final java.util.Calendar currentDate = java.util.Calendar.getInstance();
private boolean picked;
public java.util.Calendar date;
public java.util.Calendar pickDate()
{
this.picked = false;
this.date = java.util.Calendar.getInstance();
android.app.DatePickerDialog datePicker = new android.app.DatePickerDialog(this.activity.getApplicationContext(), new android.app.DatePickerDialog.OnDateSetListener() { @Override public void onDateSet(android.widget.DatePicker view, int year, int month, int dayOfMonth) { cweb.companion.DatePick.this.date.set(view.getYear(), view.getMonth(), view.getDayOfMonth()); } }, this.currentDate.get(java.util.Calendar.YEAR), this.currentDate.get(java.util.Calendar.MONTH), this.currentDate.get(java.util.Calendar.DAY_OF_MONTH)) { @Override public void onClick(android.content.DialogInterface dialog, int which) { cweb.companion.DatePick.this.picked = (which == android.content.DialogInterface.BUTTON_POSITIVE); } };
datePicker.show(); //todo resolve: exception here for unable to add window null token
datePicker = null; //dispose?
if (this.picked)
{
android.app.TimePickerDialog timePicker = new android.app.TimePickerDialog(this.activity.getApplicationContext(), new android.app.TimePickerDialog.OnTimeSetListener() { @Override public void onTimeSet(android.widget.TimePicker view, int hourOfDay, int minute) { cweb.companion.DatePick.this.date.set(cweb.companion.DatePick.this.date.get(java.util.Calendar.YEAR), cweb.companion.DatePick.this.date.get(java.util.Calendar.MONTH), cweb.companion.DatePick.this.date.get(java.util.Calendar.DAY_OF_MONTH), hourOfDay, minute); } }, this.currentDate.get(java.util.Calendar.HOUR_OF_DAY), this.currentDate.get(java.util.Calendar.MINUTE), true) { @Override public void onClick(android.content.DialogInterface dialog, int which) { cweb.companion.DatePick.this.picked = (which == android.content.DialogInterface.BUTTON_POSITIVE); } };
timePicker.show(); //picked may change back to false after that (maybe, depending on the user's confirm/abort)
timePicker = null; //dispose?
}
if (!this.picked) { this.date = null; }
return cweb.companion.DatePick.this.date;
}
public static java.lang.String toString(java.util.Calendar date) { return java.lang.String.format("%02d", date.get(java.util.Calendar.DAY_OF_MONTH)) + "/" + java.lang.String.format("%02d", date.get(java.util.Calendar.MONTH)) + "/" + java.lang.String.format("%04d", date.get(java.util.Calendar.YEAR)) + " " + java.lang.String.format("%02d", date.get(java.util.Calendar.HOUR_OF_DAY)) + ":" + java.lang.String.format("%02d", date.get(java.util.Calendar.MINUTE)) + ":" + java.lang.String.format("%02d", date.get(java.util.Calendar.SECOND)); }
public DatePick(android.app.Activity activity) { this.activity = activity; }
}
И затем вызвал его в моей MainActivity (единственной активности в приложении) с помощью этого объявления:
public class MainActivity extends androidx.appcompat.app.AppCompatActivity
{
protected android.widget.Button datePickCall;
private java.util.Calendar date;
private void pickdatePickCall()
{
cweb.companion.DatePick picker = new cweb.companion.DatePick(this);
this.date = picker.pickDate();
this.datePickCall.setText(cweb.companion.DatePick.toString(this.date));
}
@Override protected void onCreate(android.os.Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
this.setContentView(cweb.companion.R.layout.activity_main);
this.datePickCall = this.findViewById(cweb.companion.R.id.datePickCall);
this.datePickCall.setOnClickListener(new android.view.View.OnClickListener() { @Override public void onClick(android.view.View v) { cweb.companion.MainActivity.this.pickdatePickCall(); }});
}
}
Но когда я отлаживал приложение, в строке, помеченной todo в классе DatePick, где он вызывает метод "show ()" диалогового окна, я получаю исключение:
Невозможно добавить окно - токен нулевой, выполняется ли операция?
Не могу понять, как это не работает, любая помощь?