我正試圖在較小的Xamarin/Mvvmcross/iOS/Droid項目上實現Realm以測試它是否能夠替換SQLite。'Realms.Realm'的類型初始值設定項引發異常
我在iOS項目上工作得很好,但在嘗試調用Realm.GetInstance()時在Droid項目上收到異常。
的類型初始關於「Realms.Realm」引發了異常
內部異常 System.Reflection.ReflectionTypeLoadException 模塊中的類不能被加載。
如果在加載Realm dll之前發生MvvmCross設置,我已經縮小了它的範圍,我認爲這是反射問題。
例如,如果我在任何從MvxActivity或MvxAppCompatActivity(或Mvvmcross Setup/CreateApp進程中的任何位置)繼承的活動中調用Realm.GetInstance(),則會發生異常。
然而,如果我請變種分貝= Realm.GetInstance()(& db.Close())從正常的活動德羅伊德第一,然後啓動MVX安裝過程,通過啓動MvxActivity,從德羅伊德活動它的工作原理很好,並且繼續在應用程序生命週期中工作。
同樣,如果我繼承應用程序並在OnCreate()中打開Realm實例並關閉它,Real會初始化應用程序中的任何其他位置。
示例代碼
//工作
[Application]
public class CustomApplication : Application
{
public CustomApplication (IntPtr javaReference, JniHandleOwnership transfer) : base (javaReference, transfer)
{
}
public override void OnCreate()
{
base.OnCreate();
var db = Realm.GetInstance();
db.Close();
}
}
//不起作用,除非Realm.GetInstance()已經被調用一次
[Activity(Label = "View for FirstViewModel")]
public class FirstView : MvxActivity
{
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
SetContentView(Resource.Layout.FirstView);
var db = Realm.GetInstance();
db.Close();
}
}
我已經把一個測試項目在github上https://github.com/vurtigo/TestRealm
我試着在Xamarin Android Player(在API 22圖像上)運行項目,它對我很有用。你在哪些應用上運行? – Tayschrenn
我已將測試項目重置爲非工作版本。我在Xamarin Android Player上測試了API 22。原來,如果你從MvxApplication.Initialize中調用Realm.GetInstance,它也可以工作 - 並且該代碼已經被留下。現在它已被註釋掉。謝謝 –
謝謝,我確認了。 – Tayschrenn