亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Xamarin Android java.lang.InstantiationException:

Xamarin Android java.lang.InstantiationException:

C#
胡子哥哥 2023-08-20 10:56:17
我正在嘗試將java庫實現到xamarin中。為此,我創建了一個 java 綁定庫并將 dll 引用到我的 xamarin.android 項目中?;旧?JBL 生成的代碼如下所示。正如你所看到的,它沒有帶有 0 個參數的構造函數。public abstract class SAAgent : Service{        [Register(".ctor", "(Ljava/lang/String;)V", "")]        protected SAAgent(string p0);        protected SAAgent(IntPtr javaReference, JniHandleOwnership transfer);        [Register(".ctor", "(Ljava/lang/String;Ljava/lang/Class;)V", "")]        protected SAAgent(string p0, Class p1);我實現了一個繼承此生成的 SAAgent 類的類。 [Service(Exported = true, Name = "WearCompanion.Droid.ProviderService")]    public class ProviderService : SAAgent     {           public ProviderService() : base("ProviderService", SASOCKET_CLASS)        {        }當我執行代碼時,我收到一個異常Java.Lang.RuntimeException Message=無法實例化服務 WearCompanion.Droid.ProviderService:java.lang.InstantiationException:java.lang.Class 沒有零參數構造函數所以它期望我有 0 個參數構造函數。Samsung Tizen 網站上有一個示例,他們的 java 示例如下所示public class ProviderService extends SAAgent {    private static final String TAG = "HelloAccessory(P)";    private static final Class<ServiceConnection> SASOCKET_CLASS = ServiceConnection.class;    public ProviderService() {        super(TAG, SASOCKET_CLASS);    }但是當我查看 xamarin.android 項目的 obj 文件夾時,發現生成了 ProviderClass.java 文件。它看起來像下面這樣,public class ProviderService    extends com.samsung.android.sdk.accessory.SAAgent    implements        mono.android.IGCUserPeer{    public ProviderService (java.lang.String p0, java.lang.Class p1)    {        super (p0, p1);        if (getClass () == ProviderService.class)            mono.android.TypeManager.Activate ("WearCompanion.Droid.ProviderService, WearCompanion.Android", "System.String, mscorlib:Java.Lang.Class, Mono.Android", this, new java.lang.Object[] { p0, p1 });    }我不明白如何使 xamarin 從帶有 0 個構造函數的 C# 生成 java 類?這是java綁定的問題嗎?PS,我已經反編譯了jar來查看SAAgent java實現,它與C#實現相同。所以java綁定庫做了正確的工作。我不確定是否應該自己手動添加無參數構造函數?
查看完整描述

1 回答

?
長風秋雁

TA貢獻1757條經驗 獲得超7個贊

最后我找到了解決方案。Xamarin 實際上在其文檔中包含了有關缺少構造函數的信息。正如所解釋的,應該使用導出屬性。因此,如果我按如下方式更改 C# 類構造函數。它使用零參數構造函數按預期生成準確的 java 類。


[Export(SuperArgumentsString?=?"\"ProviderService\",?ProviderService_ProviderServiceSocket.class")]
????????public?ProviderService()?:?base("ProviderService",?SASOCKET_CLASS)
????????{

????????}


查看完整回答
反對 回復 2023-08-20
  • 1 回答
  • 0 關注
  • 161 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號