2017-11-15 14 views
0

나는 Akavache를 통해 캐쉬 된 데이터를로드하려고합니다. 그러나 나는 왜 제대로 할 수 없는지 알지 못합니다. FullName 및 전자 메일을 얻으려고하면 로그인 후에 이미 캐시 된 것이므로 "CachedUser"모델에서 getobject를 사용하지만 FullName 및 Email에 대한 정의가없는 이유를 알 수 없습니다. 은 여기 내 CachedUser 모델IObservable doesnt 정의가 들어 있지만 실제로 거기에 정의가 있습니다.

namespace KGVC.Models 
{ 
    public class CachedUsers 
    { 
     public string FullName { get; set; } 
     public string Email { get; set; } 
    } 
} 

이며, 여기에 내가

public void GetDataCache(object sender, EventArgs e) 
     { 
      var loaded = BlobCache.LocalMachine.GetObject<CachedUsers>("usercached"); 

      txtemail.Text = loaded.FullName; 
      txtfullname.Text = loaded.FullName.ToString(); 
     } 

을 구현하려고한다는 Akavache에서 GetObject를하는 코드이며, 여기에 캐시 사용자 코드를입니다

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?) 

내 코드에 아무 문제가 없다고 생각하기 때문에 여기에있는 문제는 무엇입니까? 이걸 알아낼 수 있니? 개념의 더 나은 이해를 얻기 위해 비동기/기다리고의 개념과 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(); 
    }); 
} 

봐 :

답변

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에 가입 할 필요가 그리고이 특별한 경우에 어떤 문제가있는 것입니다.

+0

덕분에 구독과 함께 그 작품을,하지만 거기에 나를 위해 그것을 기다리고 사용하지 못할 궁금하게 만드는 무언가가있다 그리고 그 IObservable은 Awaiter 얻을에 대한 정의가 포함되어 있지 않습니다. 하지만 결국 내 코드가 작동, 난 그냥 여기에 아하하하 호기심이 –

+0

아 나는 지금 당신을 위해 그것을 체크 아웃 실제 코드가 필요하지 않습니다. 기억에서 나는 이런 것을 기억했고 두 가지 중 하나를 할 수 있다고 생각했습니다. 아마도 그 방법의 과부하 일 겁니다. 하지만 최근 버전에서는 제거되었을 수도 있습니다. 다행히 도왔다! –

+0

ok thaks Gerarld 당신은 나에게 매우 도움이되었습니다 –