Gnrtuga Posted April 7, 2018 at 06:17 PM Report #610106 Posted April 7, 2018 at 06:17 PM Olá pessoal, ando aqui perdido (para não variar), Tenho aqui duas Tasks, e que funcionam quando invocados por um EventHandler. public async Task SaveAsync() { StorageFile ListadeFavoritos = await ApplicationData.Current.LocalFolder.CreateFileAsync("ListaGuardada", CreationCollisionOption.ReplaceExisting); IRandomAccessStream raStream = await ListadeFavoritos.OpenAsync(FileAccessMode.ReadWrite); using (IOutputStream outStream = raStream.GetOutputStreamAt(0)) { //serialização dos dados DataContractSerializer serializer = new DataContractSerializer(typeof(ObservableCollection<Favoritos>)); serializer.WriteObject(outStream.AsStreamForWrite(), MeuFavorito); await outStream.FlushAsync(); } } public async Task RestoreAssync() { StorageFile ListadeFavoritos = await ApplicationData.Current.LocalFolder.GetFileAsync("ListaGuardada"); if (ListadeFavoritos == null) return; IRandomAccessStream inStream = await ListadeFavoritos.OpenReadAsync(); // desserialização dos dados DataContractSerializer serializer = new DataContractSerializer(typeof(ObservableCollection<Favoritos>)); var FavoritosGuardados = (ObservableCollection<Favoritos>)serializer.ReadObject(inStream.AsStreamForRead()); inStream.Dispose(); ListaFavoritos.ItemsSource = FavoritosGuardados; } Mas eu queria chamar a Task RestoreAssync quando a aplicação abre, para que apareçam logo os dados do utilizador. Já tentei uma data de muitas formas, mas possivelmente falta-me alguma coisa. Sem querer abusar, também quero chamar a Task SaveAsync quando saio da aplicação, mas sobre isso ainda não pesquisei. Obrigado. Férias! Estou por aqui: http://maps.google.p...001549&t=h&z=20 (a bulir claro está!) Nunca mais é verão outra vez.. :)
M6 Posted April 9, 2018 at 09:46 AM Report #610132 Posted April 9, 2018 at 09:46 AM Se a tua aplicação for Windows Forms, podes colocar isso na construção do form e no fecho do mesmo (ou no "main" que cria o form) A técnica é essa, tens de ver a documentação para saberes o ciclo de vida da aplicação porque não sei de cor. 10 REM Generation 48K! 20 INPUT "URL:", A$ 30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50 40 PRINT "404 Not Found" 50 PRINT "./M6 @ Portugal a Programar."
Gnrtuga Posted April 9, 2018 at 12:09 PM Author Report #610138 Posted April 9, 2018 at 12:09 PM Olá M6 e obrigado pela resposta. A aplicação é Universal Windows Platform, mas o principio deve ser o mesmo. Já meti no MainPage, tentei antes e depois do this.InitializeComponent(); mas ele não me carrega a lista. public MainPage() { RestoreAssync(); this.InitializeComponent(); Intro(); MeuFavorito = new ObservableCollection<Favoritos>(); } Será que tenho que chamar a Task de outra maneira? Ou será que a tenho que chamar noutro local? Por exemplo o método Intro() vai abrir assim que a aplicação abre, em teoria deveria ser aqui que tinha que chamar o RestoreAssync Férias! Estou por aqui: http://maps.google.p...001549&t=h&z=20 (a bulir claro está!) Nunca mais é verão outra vez.. :)
M6 Posted April 9, 2018 at 03:26 PM Report #610147 Posted April 9, 2018 at 03:26 PM Calma. Tens de confirmar com o ciclo de vida antes. Isso corre ou rebenta com "null pointer"? Primeiro tens de garantir que tudo arrancou como deve ser. Pelo que vejo o RestoreAssync foi chamado assim do nada? Não tens de criar uma instancia primeiro e depois invocares o método? 10 REM Generation 48K! 20 INPUT "URL:", A$ 30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50 40 PRINT "404 Not Found" 50 PRINT "./M6 @ Portugal a Programar."
Gnrtuga Posted April 11, 2018 at 11:27 AM Author Report #610180 Posted April 11, 2018 at 11:27 AM (edited) M6 mais uma vez obrigado pela resposta. Depois de andar aqui a brincar com breakpoints percebi que tinha várias coisas mal. Acabei por mudar o método de serialização de texto para JSON, principalmente porque não estava a perceber como é que iria enviar os dados para a ListView. Como em JSON encontrei mais tutorials e mais documentação lá alterei. O método RestoreAssync chamo logo diretamente da MainPage, e (ainda só testei 2x) funciona. Não é preciso instanciar. Só me falta ver a 2º parte, como gravar a lista no fecho da aplicação. Obrigado pela ajuda. Edited April 11, 2018 at 11:27 AM by Gnrtuga Férias! Estou por aqui: http://maps.google.p...001549&t=h&z=20 (a bulir claro está!) Nunca mais é verão outra vez.. :)
Muryllo Posted May 20, 2018 at 02:12 AM Report #610618 Posted May 20, 2018 at 02:12 AM Mas se eu não me engano, por ser um método assíncrono você devia usar Await frente ao RestoreAssync. Se ele for chamado sem o Await o método não vai rodar.
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now