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 объект, чтобы получить лучшее понимание концепций и в чем проблема в данном конкретном случае.

Другие вопросы по тегам