Xamarin Android全局会话变量 - 错误未找到构造函数(System.IntPtr,Android.Runtime.JniHandleOwnership)

时间:2014-11-04 04:32:42

标签: variables session xamarin xamarin.android global

我在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;的异常。被扔了。

我感谢你的帮助。

1 个答案:

答案 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)
    {
    }

    // ...
}

一些背景阅读: