启动应用时在logcat中出现错误。下面是logcat和Java代码,我已经在stackover流中检查了此问题,但是找不到解决方案。
MainActivity.Java
public class MainActivity extends AppCompatActivity {
public boolean toasted = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (!((MainActivity) getApplicationContext()).toasted) { (MainActivity.java:28)
Toast.makeText(MainActivity.this, "Welcome" , Toast.LENGTH_LONG).show();
((MainActivity)getApplicationContext()).toasted = true;
}
}
Logcat
Caused by: java.lang.ClassCastException: android.app.Application cannot be cast to com.example.counter.MainActivity
at com.example.myapp.MainActivity.onCreate(MainActivity.java:28)
答案 0 :(得分:0)
您尝试将getApplicationContext()下传到MainActivity。
getApplicationContext()为您提供应用程序的上下文,它不是Activity的一部分。
如果您需要在活动中保存变量,请使用 this.toasted = true
答案 1 :(得分:0)
为什么要强制将getApplicationContext()强制转换为MainActivity? 您应该获得这样的上下文
This.getApplicationContext();
答案 2 :(得分:0)
解决方案:
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
完全不同。
您也没有理由要求强制转换以执行所需的操作。您目前位于text
类中,因此可以直接访问它的实例变量。无需执行其他操作即可获取上下文,对其进行强制转换,只需将新变量分配给您已经可以访问的变量即可。