Week 1:
Dag 1 en 2: Kennis gemaakt met de Sense API.
Hier bij werd me duidelijk dat wat ik geleerd heb tijdens de lessen webservices en kon ik de theory meer verbinden met de praktijk kennis. Dit gaat niet alleen over het aanspreken van de Rest client maar ook het verzenden van de data door middel van JSON
Dag 3: Begin gemaakt met de Windows Phone 7 en C#.
Ik had om te beginnen een start gemaakt hoe je een menu maakte en hoe je data verzend.
Teven ben ik die dag bezig geweest met een begin van de data communicatie class. Deze heb ik uit eindelijk thuis getest vanwege dat de Emulator niet goed op locatie werkte.
Dag 4: Gekeken hoe de Windows Phone 7 Locaties op vraagt.
Dag 5: Gekeken hoe de Windows Phone 7 Accelerometer op vraagt
Week 2:
Dag 6:
Dag 7:
Dag 8: De dag dat ik eindelijk een Window Phone 7 in de hand kreeg.
Dag 9: De dag dat we eindelijk de Windows Phone 7 gebruiksklaar hadden om op te testen
Dag 10: Eindelijk Mango op de Windows Phone 7
Week 3:
Dag 11:
Dag 12:
Dag 13:
Ik zat al een paar dagen de kloten met het versturen van data op de WP7. Deze data word asynchrone verstuurd. Wat op de WP7 betekend dat het pas uitgevoerd word aan het eind van de taken die te doen staan. Ik kwam hier niet alleen uit dus heb ik de hulp in geroepen van 2 docenten. Helaas hielp dit niet maar ik had wel een weg om in te slaan. Want ik heb uiteindelijk een nieuwe taak gedaan die niet synchrone loopt of gewoon een timer. Toen kreeg ik wel een waarde uit de asynchrone commnunicatie. Toe kwam het volgende probleem. Ik wil als de informatie niet goed terug komt een melding op het scherm laten verschrijnen en als het wel geod gaat dat het naar een volgend scherm gestuurd wordt. Helaas nu loopt het hier op vast door een Cross Thread Exception.
Dag 14:
Ben een halve dag bezig geweest met het oplossen van de Cross Thread Exception. De oplossing hiervoor bleek simpeler dan het probleem met de timer.
Deployment.Current.Dispatcher.BeginInvoke(() =>
{
this.NavigationService.Navigate(new Uri("/SensorPage.xaml", UriKind.Relative));
});
Dag 15:
Planning: Kijken of een device op op de server staat, zo nee, een nieuwe aan maken, zo ja, data updaten.
rslootweg
/ October 14, 2011Zoals vanmorgen besporken:
probeer je probleem goed te omschrijven en welke methoden je hebt gebruik om een oplossing te vinden.
- asynchrone communicatie Phone 7 issue?
- extra timer ingebouwd, deel van t probleem opgelost.
- hoofdclasse , static…., classe binnen hoofdclasse gebruikt om …
Kan je hier proberen een duidelijk verhaal van te maken? Dus asynchrone communicatie op Phone 7 als probleem (wat bijvoorbeeld niet op een iPhone of Android speelt?)
Succes!
Florian
/ October 17, 2011Communciatie Met API
Vorige week stond het probleem “Hoe data op te halen via GET” via me huidige Communicatie functie.
Na een beetje zoeken blijkt dat je via een HttpRequest geen GET kan op kan vragen omdat deze funciet een Body verlangd. Dus als je er een GET mee stuurd krijg je de melding terug dat de Method niet klopt. Oke Dan de vraag hoe je dan een GET kan opvragen. Heel makkelijk, je maakt gebruik van een WebClient die kan wel werken met GET.
// Nieuwe WebClient aanmakenWebClient request = new WebClient();
// Header aan de WebClient toevoegen
// Dit kan fout zijn
// Huidige situatie = [Sessie_ID]:[Sessie-code]
request.Headers[headerM] = headerV;
// Test of de URL er goed doorheen komt.
Debug.WriteLine(uri);
// Ik weet niet echt het verschil tussen DowloadString en OpenRead
// Ze schrijnen allebij het zelde te doen. In dit geval is niet werken
//request.DownloadStringAsync(uri);
//request.DownloadStringCompleted += new DownloadStringCompletedEventHandler(getStreamComplete);
request.OpenReadAsync(uri);
request.OpenReadCompleted += new OpenReadCompletedEventHandler(getStreamComplete);
Oke die werkt, ik krijg geen melding dat de Method verkeerd is. Nu geeft hij gelijk terug dat de link niet goed is, want hij krijgt geen data terug. Het volgende probleem. Hoe krijg je de link er goed in met Header.
System.Net.WebException: The remote server returned an error: NotFound. ---> System.Net.WebException: The remote server returned an error: NotFound.b__1(Object sendState)b__0(Object sendState)
at System.Net.Browser.ClientHttpWebRequest.InternalEndGetResponse(IAsyncResult asyncResult)
at System.Net.Browser.ClientHttpWebRequest.<>c__DisplayClass2.
at System.Net.Browser.AsyncHelper.<>c__DisplayClass4.
at System.Reflection.RuntimeMethodInfo.InternalInvoke(RuntimeMethodInfo rtmi, Object obj, BindingFlags invokeAttr, Binder binder, Object parameters, CultureInfo culture, Boolean isBinderDefault, Assembly caller, Boolean verifyAccess, StackCrawlMark& stackMark)
oke de volgende link moet werken “https://api.sense-os.nl/sensors?page=0&details=full” heb de link nu 3 keer getest. Dus het probleem zal bij de Header of bij de sessie_id liggen. Alleen de sessie_id moet in de header komen.
Dus de 2 volgende problemen word de sessie goed in de Header geplaatst en of is de sessie wel werkbaar.
Het probleem is nu opgelost:
Het probleem zat zo als ik vermoede in de Header. Ik had een paar spel fouten er in gemaakt.
De Goede oplossing is:
// Dit geeft de waarde aan die de sessie heeft, zonder het voorvoegsel van sessie_id.
String strAlter = Communicatie.SessionHandler.sessionHandler.Substring(15, 27);
request.Headers["X-SESSION_ID"] = strAlter;
Ben je je code aan het opschonen die ik net gemaakt heb blijkt er in het eind product een fout te staan dat een probleem geeft.
Ik had er voor namelijk om te testen in de code een standaard link gezet om te testen. Deze link had ik met het opschonen er uit gehaald omdat ik er een regel er boven de volgende tekst had:
// Maken van de uri stringString baseUri = "http://api.sense-os.nl/";
Uri uri = new Uri(baseUri + requestUri);
Helaas bleek er geen “http” te staan maar https. wat weer tot het oude frustrerende probleem kwam. terwijl ik later hoorde dat de server wel “https” aan zou moet kunnen.
Maar dit deel is voor nu afgesloten nu naar het omzetten van json in iets begrijpelijks.
Florian
/ October 21, 2011Asynchrone Communicatie
Voor communicatie maakt de Windows Phone 7 (WP7) gebruik van Asynchrone communicatie. Dit betekend voor WP7 ontwikkeling dat je een functie aan roept die buiten de standaard line valt.
WP7 kan meerdere taken tegelijk uitvoeren maar werkt binnen een taak liniare.
Dit betekent voor asyncrone communicatie dat het na de aangeroepen code wordt uitgevoerd. Het probleem is dan ook dat de data die je dan terug stuurt buiten de functie scoop valt.
Je zou dit op 2 manier kunnen opvangen om het toch binnen een functie te kunnen gebruiken. 1 een timer maken die controleren of de asynchrone communicatie geslaagd is of door de communicatie functie aan te laten roepen.
Ik heb beide manieren gebruikt. Om te beginnen met de timer.
[Code van timer]
Ik vond zelf hier een klein nadeel aan hangen door dat je uit einderlijk een probleem had dat je in een andere thread zit te werken als je ook doet met asyncrone communicatie, beide hebben het probleem dat ze niet kunnen communiceren met de normaal thread.
Om hier uit de normale thread aan te spreken heb je een Dispatcher nodig.
Dispatcher.BeginInvoke( () => {// This code is on the UI thread.
});
Ik moet bekennen dat ik heel dit deel niet echt tot in de puntjes begrijpt.