【问题标题】:Xamarin Android Global Session Variables - Error No constructor found (System.IntPtr, Android.Runtime.JniHandleOwnership)Xamarin Android 全局会话变量 - 错误未找到构造函数(System.IntPtr,Android.Runtime.JniHandleOwnership)
【发布时间】:2014-11-04 04:32:41
【问题描述】:

我正在 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 清单:

    <?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] 未处理的异常: [MonoDroid] System.NotSupportedException:无法从本机句柄 a2600019 激活 MyApp.Library.Droid.SessionApplication 类型的实例 ---> System.MissingMethodException:未找到 MyApp.Library.Droid.SessionApplication::.ctor(System.IntPtr, Android.Runtime.JniHandleOwnership) 的构造函数 ---> Java.Interop.JavaLocationException:引发了“Java.Interop.JavaLocationException”类型的异常。

感谢您的帮助。

【问题讨论】:

    标签: variables session xamarin xamarin.android global


    【解决方案1】:

    恭喜,您找到了需要提供显式构造函数来处理 Java 对象暴露给托管(单声道)代码时的少数情况之一。

    来自文档:

    在两种情况下,必须在托管可调用包装子类上手动提供 (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)
        {
        }
    
        // ...
    }
    

    一些背景阅读:

    【讨论】:

      猜你喜欢
      • 2014-12-21
      • 1970-01-01
      • 2011-08-03
      • 1970-01-01
      • 2010-12-28
      • 2019-04-26
      • 1970-01-01
      • 1970-01-01
      • 2018-08-10
      相关资源
      最近更新 更多