Xamrin形成System.TypeInitializationException

时间:2016-09-25 03:10:47

标签: xamarin

您好,我在Android中调试时使用Azure移动服务离线存储时遇到此异常。它在使用Windows时工作正常。

以下是代码,仅基于tod0list示例

    static StaffManager defaultInstance = new StaffManager();
    MobileServiceClient client;

    IMobileServiceSyncTable<Staff> staffTable;

    private StaffManager()
    {
        client = new MobileServiceClient(Constants.ApplicationURL);

            var store = new MobileServiceSQLiteStore("localstore1.db");
            store.DefineTable<Staff>();

            this.client.SyncContext.InitializeAsync(store);

            this.staffTable = client.GetSyncTable<Staff>();

    }

这是一个例外:

System.TypeInitializationException:&#39; OrchardApp.StaffManager&#39;的类型初始值设定项。抛出异常。

09-26 11:05:48.991 D / Mono(1684):DllImport试图加载:&#39; /system/lib/liblog.so'。 09-26 11:05:48.991 D / Mono(1684):DllImport加载库&#39; /system/lib/liblog.so'。 09-26 11:05:48.991 D / Mono(1684):DllImport搜索:&#39; /system/lib/liblog.so' (&#39; /system/lib/liblog.so')。 09-26 11:05:48.991 D / Mono(1684):搜索&#39; __ android_log_print&#39;。 09-26 11:05:48.991 D / Mono(1684):探索&#39; __ android_log_print&#39;。 09-26 11:05:48.991 D / Mono(1684):发现为&#39; __ android_log_print&#39;。 09-26 11:05:48.991 I / MonoDroid(1684):未处理的异常: 09-26 11:05:48.991 I / MonoDroid(1684):System.TypeInitializationException:&#39; OrchardApp.StaffManager&#39;的类型初始值设定项。抛出一个例外。 ---&GT; Microsoft.WindowsAzure.MobileServices.SQLiteStore.SQLiteException:执行SQLite命令时出错:&#39;无法打开数据库文件&#39;。 09-26 11:05:48.991 I / MonoDroid(1684):在Microsoft.WindowsAzure.MobileServices.SQLiteStore.SQLitePCLRawHelpers.VerifySQLiteResponse(Int32 result,Int32 expectedResult,SQLitePCL.sqlite3 db)[0x00024] in:0 09-26 11:05:48.991 I / MonoDroid(1684):在Microsoft.WindowsAzure.MobileServices.SQLiteStore.SQLitePCLRawHelpers.GetSqliteConnection(System.String filename)[0x0000d] in:0 09-26 11:05:48.991 I / MonoDroid(1684):在Microsoft.WindowsAzure.MobileServices.SQLiteStore.MobileServiceSQLiteStore..ctor(System.String fileName)[0x00039] in:0 09-26 11:05:48.991 I / MonoDroid(1684):位于C:\ OPAC \ OrchardApp \ OrchardApp \ OrchardApp \ Services \ StaffManager.cs中的OrchardApp.StaffManager..ctor()[0x0001e]:27 09-26 11:05:48.991 I / MonoDroid(1684):位于C:\ OPAC \ OrchardApp \ OrchardApp \ OrchardApp \ Services \ StaffManager.cs中的OrchardApp.StaffManager..cctor()[0x00000]:16 09-26 11:05:48.991 I / MonoDroid(1684):---内部异常堆栈跟踪结束--- 09-26 11:05:48.991 I / MonoDroid(1684):位于C:\ OPAC \ OrchardApp \ OrchardApp \ OrchardApp \ Views \ TodoList.xaml.cs中的OrchardApp.TodoList..ctor()[0x0000f]:18 09-26 11:05:48.991 I / MonoDroid(1684):在OrchardApp.HomePage +&lt;&lt; -ctor&gt; b__0_1&gt; d.MoveNext()[0x0000f]在C:\ OPAC \ OrchardApp \ OrchardApp \ OrchardApp \ Views \ HomePage.xaml.cs:26 09-26 11:05:48.991 I / MonoDroid(1684):---从抛出异常的上一个位置开始的堆栈跟踪结束--- 09-26 11:05:48.991 I / MonoDroid(1684):在/ Users / builder / data / lanes / 3415 / 7db2aac3 / source / mono / external /中的System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()[0x0000c] referencesource / mscorlib程序/系统/运行/ exceptionservices / exceptionservicescommon.cs:143 09-26 11:05:48.995 I / MonoDroid(1684):在/ Users / builder / data / lanes / 3415 / 7db2aac3 / source /中的System.Runtime.CompilerServices.AsyncMethodBuilderCore.m__0(System.Object state)[0x00000]单声道/外部/ referencesource / mscorlib程序/系统/运行/ compilerservices / AsyncMethodBuilder.cs:1018 09-26 11:05:48.995 I / MonoDroid(1684):在/ Users / builder / data / lanes / 3415 / 7db2aac3 / source /中的Android.App.SyncContext + c__AnonStorey0。&lt;&gt; m__0()[0x00000] MonoDroid的/ SRC / Mono.Android / SRC / Android.App / SyncContext.cs:18 09-26 11:05:48.995 I / MonoDroid(1684):在/ Users / builder / data / lanes / 3415 / 7db2aac3 / source / monodroid / src /中的Java.Lang.Thread + RunnableImplementor.Run()[0x0000b] Mono.Android/src/Java.Lang/Thread.cs:36 09-26 11:05:48.995 I / MonoDroid(1684):在/ Users / builder / data / lanes / 3415 / 7db2aac3 / source / monodroid中的Java.Lang.IRunnableInvoker.n_Run(IntPtr jnienv,IntPtr native__this)[0x00009] /src/Mono.Android/platforms/android-23/src/generated/Java.Lang.IRunnable.cs:81 09-26 11:05:48.995 I / MonoDroid(1684):at(包装器动态方法)System.Object:578fa2b5-486e-424f-9b2b-bb0dcaf1a772(intptr,intptr) 09-26 11:05:49.003 D / Mono(1684):DllImport搜索:&#39; __内部&#39; (&#39;(空)&#39)。 09-26 11:05:49.003 D / Mono(1684):搜索&#39; java_interop_jnienv_throw&#39;。 09-26 11:05:49.003 D / Mono(1684):探索&#39; java_interop_jnienv_throw&#39;。 09-26 11:05:49.003 D / Mono(1684):发现为&#39; java_interop_jnienv_throw&#39;。 发生了未处理的异常。

2 个答案:

答案 0 :(得分:1)

答案 1 :(得分:0)

与PCL项目中的3.0.0版本类似的问题我已经解决了this解决方法

PCL Project App.cs

        public static string Path = "MyLocalStore.db";

Android Project MainActivity.cs nel metodo OnCreate

        //Call this in each platform before intializing your Mobile Client
        SQLitePCL.Batteries.Init();

        App.Path = Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal), App.Path);

        if (!File.Exists(App.Path))
        {
            File.Create(App.Path).Dispose();
        }

最后

        var store = new MobileServiceSQLiteStore(App.Path);