您好,我在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;。 发生了未处理的异常。
答案 0 :(得分:1)
见Thomas Hagstrom的评论。 https://forums.xamarin.com/discussion/78936/microsoft-azure-mobile-client-sqlitestore-upgraded-to-3-0-get-error-unable-to-open-database-file
降级到2.1.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);