Xamarin.Forms App(Android)挂起,找不到原因

时间:2018-04-19 23:52:50

标签: c# sqlite xamarin

在XAML视图中,我有一个开关,它绑定到类的“Done”属性。我想修改“完成”属性的setter,以记录对sqlite数据库的任何更改。

当程序调用FindAsync()方法时,程序无限期挂起而没有任何消息(请参阅下面的代码片段)。我也尝试过其他与数据库相关的方法,比如CreateTableAsync,并且也有相同的挂起。

任何人都知道我做错了什么,以及我能做些什么才能得到我想要的东西?

xaml:

<Switch HorizontalOptions="End" IsToggled="{Binding Done}" />

代码段

    public bool Done
    {
        get { return _done; }
        set
        {
            _done = value;
            OnPropertyChanged();
            Debug.WriteLine(string.Format("Set attribute {0}: {1}", nameof(Done), value));
            var itm = App.Database.FindAsync<LogItem>(Id).Result;
            // Database.CreateTableAsync<LogItem>().Wait();
            Debug.WriteLine("Back from find");
            if (itm != null)
            {
                // ...
            }
        }
    }

数据库连接:

 private static SQLiteAsyncConnection database;         
   public static SQLiteAsyncConnection Database
    {
        get
        {
            if (database == null)
            {
                String dbPath = DependencyService.Get<IFileHelper>().GetLocalFilePath(Constants.DatabaseName);
                Debug.Write(string.Format("{0}: {1}: ", nameof(Database), dbPath));
                database = new SQLiteAsyncConnection(dbPath);
                Debug.WriteLine("Ok.");
            }
            return database;
        }
    }

最后,这是LogItem类

public class LogItem
{
    [PrimaryKey, AutoIncrement]
    public int Id { get; set; }
    public string Name { get; set; }  // row name
    public string Input { get; set; }  // value
}

0 个答案:

没有答案