Решение:
public class MainActivity extends AppCompatActivity {
public boolean toasted = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (!toasted) {
Toast.makeText(MainActivity.this, "Welcome" , Toast.LENGTH_LONG).show();
toasted = true;
}
}
Эта проблема вызвана тем, что вы пытаетесь наложить Application
в Activity
.
Это просто невозможно, потому что когда вы читаете, есть определенные правила, которые необходимо соблюдать.
Application
и Activity
могут быть преобразованы в Context
, поскольку они оба являются потомками класса Context
.
Однако, если вы помните правила наследования в Java, экземпляры дочерних классов могут быть преобразованы в их родительский класс, а экземпляр родительского класса может быть приведен к его дочернему классу , только если изначально это был детский класс.
Поэтому, когда вы используете getApplicationContext()
, вы получаете контекст для Application
, а не для Activity
.Вот почему приведение к MainActivity
не удастся, потому что MainActivity
- это потомок AppCompatActivity
, который является потомком Activity
, что полностью отличается от Application
.
Нет также никаких причин, по которым вам следует требовать, чтобы кастинг делал то, что вы хотите.В данный момент вы находитесь внутри класса MainActivity
, поэтому у вас есть прямой доступ к его переменным экземпляра.Нет необходимости выполнять дополнительные операции для извлечения контекста, его приведения, просто для назначения новой переменной переменной, к которой у вас уже есть доступ.