Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用Akavache从本地存储中删除记录_C#_Xamarin_Xamarin.ios_Akavache - Fatal编程技术网

C# 使用Akavache从本地存储中删除记录

C# 使用Akavache从本地存储中删除记录,c#,xamarin,xamarin.ios,akavache,C#,Xamarin,Xamarin.ios,Akavache,我有一个本地存储在设备上的记录,还有一个从本地存储中删除记录的按钮。当用户按下按钮时,将调用此方法,并在本地从设备中删除记录(通过使guid无效)。我用Akavache来保存数据 虽然这在很大程度上起作用,但我注意到有时当我删除记录并刷新视图时,记录会从集合中删除。但是,如果注销并重新登录到应用程序,记录将重新出现 我想知道这是否是本地存储和删除记录的正确方法 public async Task RemoveFormFromDevice(FormData form) { string c

我有一个本地存储在设备上的记录,还有一个从本地存储中删除记录的按钮。当用户按下按钮时,将调用此方法,并在本地从设备中删除记录(通过使guid无效)。我用Akavache来保存数据

虽然这在很大程度上起作用,但我注意到有时当我删除记录并刷新视图时,记录会从集合中删除。但是,如果注销并重新登录到应用程序,记录将重新出现

我想知道这是否是本地存储和删除记录的正确方法

public async Task RemoveFormFromDevice(FormData form)
{
    string cacheKey = "data." + form.Guid.ToString ();

    await _cache.Invalidate (cacheKey);
    await _localStorage.Invalidate (cacheKey);

    List<KeyValuePair<Guid, int?>> guids = await _cache.Get<List<KeyValuePair<Guid, int?>>>(CACHE_KEY_PROCS);

    if (guids == null)
        return;

    guids.RemoveAll (a => a.Key == form.Guid);

    await _cache.Insert (CACHE_KEY_PROC, guids, null);
    await _localStorage.Insert (CACHE_KEY_PROCS, guids, null);
}
公共异步任务RemoveFormFromDevice(FormData表单)
{
字符串cacheKey=“data.”+form.Guid.ToString();
等待_cache.Invalidate(cacheKey);
wait_localStorage.Invalidate(cacheKey);
List guids=wait\u cache.Get(cache\u KEY\u PROCS);
if(guids==null)
返回;
guids.RemoveAll(a=>a.Key==form.Guid);
wait\u cache.Insert(cache\u KEY\u PROC,guids,null);
wait\u localStorage.Insert(缓存\u密钥\u进程,GUID,null);
}
编辑:以下是我登录应用程序时检索记录的方式:

private async Task<List<FormData>> getSavedProcs()
{
    List<FormData> forms = new List<FormData> ();

    List<KeyValuePair<Guid, int?>> guids = await _cache.Get<List<KeyValuePair<Guid, int?>>> (CACHE_KEY_PROCS);

    if (guids != null)
    {
        foreach (KeyValuePair<Guid, int?> pair in guids)
        {
            string cacheKey = "data." + pair.Key.ToString ();
            string formJson = await _cache.Get<string> (cacheKey);

            FormData form = JsonConvert.DeserializeObject<FormData> (formJson);
            if (form != null)
                forms.Add (form);
        }
    }
    return forms;
}

public async Task<T> Get<T>(string key) where T : class
{
    try
    {
        return await memoryCache.GetObject<T> (key);
    }
    catch(KeyNotFoundException ex) {
        T localStoreObj = await localStorage.Get<T> (key);

        if (localStoreObj != null)
            await this.Insert (key, localStoreObj);
        return localStoreObj;
    }
    catch(Exception ex) {
        return await Task.FromResult<T> (null);
    }
}

public virtual async Task<T> Get<T>(string key) where T : class
{
    try
    {
        return await encryptedCache.GetObject<T> (key);
    }
    catch(KeyNotFoundException ex) {
        return await Task.FromResult<T> (null);
    }
    catch(Exception ex) {
        return await Task.FromResult<T> (null);
    }
}


public async Task Insert<T>(string key, T value, DateTimeOffset? expiration = default(DateTimeOffset?)) where T : class
{
    try
    {
        await memoryCache.InsertObject<T> (key, value, expiration);
    }
    catch {
    }
}
private异步任务getSavedProcs()
{
列表形式=新列表();
List guids=await\u cache.Get(cache\u KEY\u PROCS);
if(guids!=null)
{
foreach(GUI中的KeyValuePair对)
{
字符串cacheKey=“data.”+pair.Key.ToString();
字符串formJson=await_cache.Get(cacheKey);
FormData form=JsonConvert.DeserializeObject(formJson);
if(form!=null)
表格。添加(表格);
}
}
申报表;
}
公共异步任务Get(字符串键),其中T:class
{
尝试
{
返回wait memoryCache.GetObject(键);
}
捕获(KeyNotFoundException ex){
T localStoreObj=等待localStorage.Get(key);
if(localStoreObj!=null)
等待此消息。插入(键,localStoreObj);
返回localStoreObj;
}
捕获(例外情况除外){
返回wait Task.FromResult(空);
}
}
公共虚拟异步任务Get(字符串键),其中T:class
{
尝试
{
返回等待encryptedCache.GetObject(密钥);
}
捕获(KeyNotFoundException ex){
返回wait Task.FromResult(空);
}
捕获(例外情况除外){
返回wait Task.FromResult(空);
}
}
公共异步任务插入(字符串键,T值,DateTimeOffset?expiration=default(DateTimeOffset?),其中T:class
{
尝试
{
等待memoryCache.InsertObject(键、值、过期);
}
抓住{
}
}

你能附上你如何存储记录的代码吗?@ColeXia我更新了我的帖子。我展示了在我重新登录时检索表单的代码,如果在memorycache中找不到密钥,它会从本地存储中获取密钥。您尝试过调试吗?删除记录后,从何处获取记录,memorycache还是本地存储?我建议您使用SQL工具来判断delete或get方法是否运行wrong@ColeXia,您所说的SQL工具是什么意思?Akavache基于SQLite3。好的,您能看到localStorage中的数据吗?删除记录后,请检查该记录是否仍然存在。如果是,则说明删除方法有问题,如果不是,则说明获取方法有问题。能否附上代码,说明如何存储记录?@ColeXia我更新了我的帖子。我展示了在我重新登录时检索表单的代码,如果在memorycache中找不到密钥,它会从本地存储中获取密钥。您尝试过调试吗?删除记录后,从何处获取记录,memorycache还是本地存储?我建议您使用SQL工具来判断delete或get方法是否运行wrong@ColeXia,您所说的SQL工具是什么意思?Akavache基于SQLite3。好的,您能看到localStorage中的数据吗?删除记录后,请检查该记录是否仍然存在。如果是,则说明删除方法有问题,如果不是,则说明获取方法有问题。