IObservable не содержит определения, но на самом деле там есть определение
Я пытаюсь загрузить кэшированные данные через Akavache, но я не знаю, почему я не могу сделать это правильно. я пытаюсь получить FullName и Email, которые я уже кешировал после входа в систему, поэтому я использую getobject в моей модели "CachedUser", но не знаю, почему там сказано, что там нет определения для FullName и Email. Вот моя модель CachedUser
namespace KGVC.Models
{
public class CachedUsers
{
public string FullName { get; set; }
public string Email { get; set; }
}
}
и вот код для getobject в Akavache, который я пытаюсь реализовать
public void GetDataCache(object sender, EventArgs e)
{
var loaded = BlobCache.LocalMachine.GetObject<CachedUsers>("usercached");
txtemail.Text = loaded.FullName;
txtfullname.Text = loaded.FullName.ToString();
}
а вот и кеш пользовательского кода
public void CacheUser(AuthenticationResult ar)
{
JObject user = ParseIdToken(ar.IdToken);
var cache = new CachedUsers
{
FullName = user["name"]?.ToString(),
Email = user["emails"]?.ToString()
};
BlobCache.LocalMachine.InsertObject("usercached", cache);
}
и вот полное сообщение об ошибке, которое я получаю
'IObservable<CachedUsers>' does not contain a definition for 'FullName' and no extension method 'FullName' accepting a first argument of type 'IObservable<CachedUsers>' could be found (are you missing a using directive or an assembly reference?)
в чем здесь проблема, потому что я думаю, что в моем коде нет ничего плохого. Вы можете понять это?
1 ответ
Вам либо нужно дождаться этого
public async void GetDataCache(object sender, EventArgs e)
{
var loaded = await BlobCache.LocalMachine.GetObject<CachedUsers>("usercached");
txtemail.Text = loaded.FullName;
txtfullname.Text = loaded.FullName.ToString();
}
или подписаться на IObservable
:
public async void GetDataCache(object sender, EventArgs e)
{
var loaded = await BlobCache.LocalMachine.GetObject<CachedUsers>("usercached").Subscribe(user => {
// TODO might need to wrap this in a Device.BeginInvokeOnMainThread
txtemail.Text = user.FullName;
txtfullname.Text = user.FullName.ToString();
});
}
Изучите понятия асинхронности / ожидания и IObservable
объект, чтобы получить лучшее понимание концепций и в чем проблема в данном конкретном случае.