我在Xamarin Studio 5.5.3上使用Xamarin Android,我试图使用此链接上的示例创建一个全局会话状态:
Login Session - Activities 我的代码与链接上的代码非常相似。 我的申请类:
namespace MyApp.Library.Droid
{
public class SessionApplication : Application
{
private static int _userID;
private static string _email;
private static string _firstName;
private static string _lastName;
public override void OnCreate() {
base.OnCreate();
_userID=0;
_email=null;
_firstName = null;
_lastName = null;
}
public static int UserID
{
get { retu`enter code here`rn _userID; }
set { _userID=value; }
}
public static string Email
{
get { return _email; }
set { _email=value; }
}
public static string FirstName
{
get { return _firstName; }
set { _firstName=value; }
}
public static string LastName
{
get { return _lastName; }
set { _lastName=value; }
}
}
}
我的Android Manifest:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
android:versionCode="1"
android:versionName="1.0"
package="myapp.ui.droid">
<uses-sdk />
<application android:label="myapp.ui.droid" android:name="myapp.library.droid.SessionApplication">
</application>
</manifest>
我的代码编译但是它运行会引发此异常。 [MonoDroid] UNHANDLED EXCEPTION: [MonoDroid] System.NotSupportedException:无法从本机句柄a2600019 ---&gt;激活MyApp.Library.Droid.SessionApplication类型的实例。 System.MissingMethodException:找不到MyApp.Library.Droid.SessionApplication ::。ctor(System.IntPtr,Android.Runtime.JniHandleOwnership)---&gt;的构造函数。 Java.Interop.JavaLocationException:类型&#39; Java.Interop.JavaLocationException&#39;的异常。被扔了。
我感谢你的帮助。
答案 0 :(得分:1)
恭喜,您已经找到了少数情况之一,您需要提供一个显式构造函数来处理Java对象何时暴露给托管(Mono)代码。
来自文档:
有两种情况,必须在Managed Callable Wrapper子类上手动提供(IntPtr,JniHandleOwnership)构造函数:
1 - Android.App.Application是子类。申请特别;永远不会调用默认的Applicaton构造函数,而必须提供(IntPtr,JniHandleOwnership)构造函数。 从基类构造函数调用虚方法。
要解决此问题,请提供具有(IntPtr handle, JniHandleOwnership transfer)
签名的构造函数。
[Application]
public class SessionApplication : Application
{
public SessionApplication(IntPtr javaReference, JniHandleOwnership transfer)
:base(javaReference, transfer)
{
}
// ...
}
一些背景阅读: