Почему я получаю null при обращении к переменной другого класса?

107
16 мая 2021, 09:00

Я новичок. Пишу в Android Studio. В этом классе я выбираю дату и сохраняю её в переменную String date, после чего вызываю DisplayList

public class DatePickerClass extends AppCompatActivity implements DatePickerDialog.OnDateSetListener{
String date;
@Override
protected void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    showDatePicker();
}
public void showDatePicker () {
    DatePickerDialog datePickerDialog = new DatePickerDialog(this, this,
            Calendar.getInstance().get(Calendar.DAY_OF_MONTH),
            Calendar.getInstance().get(Calendar.MONTH),
            Calendar.getInstance().get(Calendar.YEAR));
    datePickerDialog.show();
}
@Override
public void onDateSet(android.widget.DatePicker view, int year, int month, int dayOfMonth) {
    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("d.M.yy");
    Calendar calendar = new GregorianCalendar(year,month,dayOfMonth);
    date = simpleDateFormat.format(calendar.getTime());
    startActivity(new Intent(this, DisplayList.class));
}

Но здесь переменная date почему то null

    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.display_list);
    DatePickerClass datePickerClass = new DatePickerClass();
    System.out.println("The date is: "+datePickerClass.date);
}

Объясните пожалуйста, что я делаю не так. Буду очень признателен.

Answer 1

Оператор new создаёт новый объект, то есть совсем другой - в нём не может быть значений, которые вы записали в предыдущем.
В случае с активностями нужно передавать через экстра данные в Intent.

public class DatePickerClass extends AppCompatActivity implements DatePickerDialog.OnDateSetListener{
String date;
@Override
protected void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    showDatePicker();
}
public void showDatePicker () {
    DatePickerDialog datePickerDialog = new DatePickerDialog(this, this,
            Calendar.getInstance().get(Calendar.DAY_OF_MONTH),
            Calendar.getInstance().get(Calendar.MONTH),
            Calendar.getInstance().get(Calendar.YEAR));
    datePickerDialog.show();
}
@Override
public void onDateSet(android.widget.DatePicker view, int year, int month, int dayOfMonth) {
    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("d.M.yy");
    Calendar calendar = new GregorianCalendar(year,month,dayOfMonth);
    date = simpleDateFormat.format(calendar.getTime());
    Intent intent = new Intent(this, DisplayList.class);
    // добавляем в интент данные
    intent.putExtra("date_key", date)
    startActivity(intent);
}

В новой активности получаем:

    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.display_list);
    // получаем интент, которым запущена активность
    Intent intent = getIntent();
    // забираем свои данные
    System.out.println("The date is: "+ intent.getStringExtra("date_key"));
}
READ ALSO
StringUTF16 публичные методы в package-private классе

StringUTF16 публичные методы в package-private классе

Зачем в package-private классе StringUTF16 делать публичные методы, если вне пакета к этому классу, а следовательно и к методам, всё равно нет доступа?

93
Библиотеки для парсинга xml

Библиотеки для парсинга xml

Какие есть библиотеки для парсинга xml в объекты java

137
Как разложить List<Some> в Map

Как разложить List<Some> в Map

Есть такой класс

91
Не компилируется класс без указания пакета

Не компилируется класс без указания пакета

Только начинаю учить Java, скачал Intellij IDEAИ пробую скомпилировать самый обычную программу

81