Xamarin Forms - 使用 SQLite

阿兰黄 |

我一直在尝试按照此视频学习在 Xamarin Forms 中使用 SQLite,但我被卡住了

https://www.youtube.com/watch?v=FVH-9zjRP9M

项目.Droid

class LocalDatabaseHelper : Classes.ILocalDatabaseHelper
{
    public string GetLocalFilePath(string fileName)
    {
        string docFolder = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal);
        string libFolder = Path.Combine(docFolder, "..", "Library", "Databases");

        if (!Directory.Exists(libFolder))
        {
            Directory.CreateDirectory(libFolder);
        }
        return Path.Combine(libFolder, fileName);
    }
}

项目 (pcl)

    public static Classes.TaskReminder.TaskReminderDatabaseOperation Database
    {
        get
        {
            if (database == null)
            {
                string LocalFilePath = "";
                if(Device.OS==TargetPlatform.Android)
                {
                    LocalFilePath = DependencyService.Get<Classes.ILocalDatabaseHelper>().GetLocalFilePath("TaskReminder.db3");
                }
                database = new Classes.TaskReminder.TaskReminderDatabaseOperation(LocalFilePath);
            }
            return database;
        }
    }

public interface ILocalDatabaseHelper
{
    string GetLocalFilePath(string fileName);
}

它在执行时给了我未处理的异常

LocalFilePath = DependencyService.Get<Classes.ILocalDatabaseHelper>().GetLocalFilePath("TaskReminder.db3");

请帮忙。提前致谢。

注意(更多信息):

项目 (PCL)

public class TaskReminderDatabaseOperation
    {
        readonly SQLiteAsyncConnection database;
        public TaskReminderDatabaseOperation(string dbPath)
        {
            database = new SQLiteAsyncConnection(dbPath);
            database.CreateTableAsync<TaskReminder>().Wait();
        }

        public Task<List<TaskReminder>> GetTaskRemindersAsync()
        {
            return database.Table<TaskReminder>().ToListAsync();
        }

        public Task<TaskReminder> GetTaskReminder(DateTime datetime)
        {
            return database.Table<TaskReminder>().Where(i => i.ReminderDateTime == datetime).FirstOrDefaultAsync();
        }

        public Task<int> SaveTaskReminder(TaskReminder taskReminder)
        {
            if (taskReminder.Id == 0)
            {
                return database.InsertAsync(taskReminder);
            }
            else
            {
                return database.UpdateAsync(taskReminder);
            }
        }

        public Task<int> DeleteTaskReminder(TaskReminder taskReminder)
        {
            return database.DeleteAsync(taskReminder);
        }
    }
杰拉尔德·韦尔斯路易斯

仔细看视频,大约29 分 10 秒您将看到他向项目类添加了一个属性。会将依赖项注册到Xamarin.Forms 中依赖项服务

您可能忘记这样做了,这就是为什么NullReferenceException当您尝试解析接口的实现时会得到一个

请查看 Dependency Service 的工作原理,以了解此类事情的工作原理并自行解决这些错误,而不仅仅是按照视频进行操作。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章