C# 调用扩展应用程序的类时System.InvalidCastException
我正在开发一个安卓c#应用程序,其中有一个类扩展自C# 调用扩展应用程序的类时System.InvalidCastException,c#,android,visual-studio,android-activity,casting,C#,Android,Visual Studio,Android Activity,Casting,我正在开发一个安卓c#应用程序,其中有一个类扩展自Application,名为MyApplication。在MyApplication文件中,我有一个名为getDataFromDB()的方法。我试图从我的活动中调用此方法,但在运行时遇到此异常: System.InvalidCastException: MyApplication.cs public class MyApplication : Application { public MyApplication(IntPtr handle
Application
,名为MyApplication
。在MyApplication
文件中,我有一个名为getDataFromDB()
的方法。我试图从我的活动中调用此方法,但在运行时遇到此异常:
System.InvalidCastException:
MyApplication.cs
public class MyApplication : Application
{
public MyApplication(IntPtr handle, JniHandleOwnership ownerShip) : base(handle, ownerShip)
{
}
public override void OnCreate()
{
base.OnCreate();
getDataFromDB();
}
public void getDataFromDB()
{ // code
}
}
MyApplication application = ((MyApplication)this.ApplicationContext); //here's the location of the exception
application.getDataFromDB();
活动.cs
public class MyApplication : Application
{
public MyApplication(IntPtr handle, JniHandleOwnership ownerShip) : base(handle, ownerShip)
{
}
public override void OnCreate()
{
base.OnCreate();
getDataFromDB();
}
public void getDataFromDB()
{ // code
}
}
MyApplication application = ((MyApplication)this.ApplicationContext); //here's the location of the exception
application.getDataFromDB();
我不知道为什么会抛出此异常。在我看来,我的演员阵容似乎没有错。您能帮助我吗?应用程序上下文
与应用程序实例不一定是同一个对象。我经常在模拟器中看到这种情况,但也可能是特定于设备的
在Java应用程序中,您可以强制转换由返回的对象。但根据a,Xamarin中不存在等效方法。相反,您可以强制转换应用程序
属性:
MyApplication app = (MyApplication) Application;
我不确定该属性何时设置,因此在字段初始值设定项中可能不起作用
另一个选项是让
MyApplication
在OnCreate()
中保存对自身的静态引用,并提供静态getter。尽管静态字段通常是有害的,但这是有效的,因为应用程序
实例实际上是一个单例,其OnCreate
将在创建任何其他组件之前被调用。静态引用不能泄漏应用程序,因为应用程序已经与进程具有相同的生存期。好吧,我通过删除MyApplication
的构造函数的参数来解决它,如下所示:
public class MyApplication : Application
{
public MyApplication() : base(handle, ownerShip) //here's the editing location
{
}
public override void OnCreate()
{
base.OnCreate();
getDataFromDB();
}
public void getDataFromDB()
{ // code
}
}
然后我调用了应用程序
:
MyApplication application = new MyApplication();
InvalidCastException
肯定意味着铸造有问题。您是否尝试过通过某个调试器检查this.ApplicationContext
的运行时类型,即ApplicationContext
不一定是应用程序
实例。@TKK那么我需要写什么呢?我尝试了MyApplication=((MyApplication)this.application)代码>但我也得到了一个例外。