Toon posts:

[Android] Methods wachten niet op elkaar

Pagina: 1
Acties:

Onderwerpen


Verwijderd

Topicstarter
Beste <Programming>

Ik ben bezig met schrijven van een app die roosterwijzigingen laat zien, zodat je daar altijd van op de hoogte kan zijn. Deze app heb ik een tijd geleden geschreven maar de code die ik had geschreven was destijds allemaal in de onCreate en ik maakte bijna geen gebruik van methods/classes enz. Nu heb ik de code dus herschreven, maar dat lijkt meer problemen met zich mee te brengen dan dat het oplost. Dit probleem is als volgt: zie onderstaande code.
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
    public void onResume()
    {
             super.onResume();
             SharedPreferences settings = getPreferences(MODE_PRIVATE);
             final SharedPreferences.Editor editor = settings.edit();
             
             
             Network network = new Network();
             Initialize initialize = new Initialize();
             if(initialize.checkFirstTimeAppIsRun(settings, this) == true) {
                initialize.viewFirstTimeScreen(settings, this);
                 if(network.isConnected(this) == true) {
                     network.downloadRooster(1, "today.json", this , settings);
                     network.downloadRooster(2, "tomorrow.json", this, settings);
                     network.parseJSON("today.json", this, R.id.tableLayout_main);
                     network.parseJSON("tomorrow.json", this, R.id.tableLayout_main2);
                     
                 }
                 else {
                     network.parseJSON("today.json", this, R.id.tableLayout_main);
                     network.parseJSON("tomorrow.json", this, R.id.tableLayout_main2);
                 }
             }
             else {
                 if(network.isConnected(this) == true) {
                 network.downloadRooster(1, "today.json", this, settings);
                 network.downloadRooster(2, "tomorrow.json", this, settings);
                 network.parseJSON("today.json", this, R.id.tableLayout_main);
                 network.parseJSON("tomorrow.json", this, R.id.tableLayout_main2);
                 
             }
             else {
                 network.parseJSON("today.json", this, R.id.tableLayout_main);
                 network.parseJSON("tomorrow.json", this, R.id.tableLayout_main2);
             }
             }
}


Wanneer de app voor de eerste keer gestart wordt is er nog geen klas ingesteld en dat moet wel gebeuren, met de regels
Java:
1
2
 if(initialize.checkFirstTimeAppIsRun(settings, this) == true) {
                initialize.viewFirstTimeScreen(settings, this);


Wil ik dan de user een schermpje laten zien waar hij zijn klas in kan stellen, probleem is echter dat de methods die daarna komen. downloadRooster() en parseJSON() niet wachten totdat viewFirstTimeScreen klaar is en hun eigen layout laten zien. Wat dus tot gevolg heeft dat het viewFirstTimeScreen helemaal niet zichtbaar is.

Nu heb ik verschillende dingen al geprobeerd, maar niks werkt :(

Graag hoor ik van jullie suggesties en ideeën om dit op te lossen.

mvg Coltragon

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Maak je gebruik van threading in die methods die niet op elkaar wachten? In dat geval zul je namelijk netjes tussen die threads moeten gaan communiceren met semaphores.

edit:
...maar de post hieronder is veel zinniger. :)

[ Voor 14% gewijzigd door NMe op 29-09-2011 12:51 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Andre-85
  • Registratie: April 2003
  • Niet online

Andre-85

Sid

Wat je geprobeerd hebt is niet helemaal duidelijk op deze manier...

Kijk eens naar Intents. Volgens mij moet je ViewActivity om de klas in te stellen een Intent versturen op het moment dat de klas gekozen is, naar je 'main' view activity. Daar reageer je op die Intent door downloadRooster e.d. aan te roepen.

Het is een asynchrone actie die je niet synchroon kan programmeren.

[ Voor 3% gewijzigd door Andre-85 op 29-09-2011 14:15 . Reden: Ik ben al weer een beetje uit de Android terminilogie. ;) ]

Lorem
Whenever we feel the need to comment something, we write a method instead. - Martin Fowler
People who think they know everything really annoy those of us who know we don't - Bjarne Stroustrup


  • DEiE
  • Registratie: November 2006
  • Laatst online: 22-09 13:39
Klopt, je moet bij Android een Intent samenstellen, en deze meegeven aan de startActivity-functie als je geen resultaten verwacht (bijvoorbeeld bij een overzicht) of de startActivityForResult als je wel resultaten wil hebben, deze heb je in dit geval nodig.

Zie ook Activities: Starting an Activity

Verwijderd

Topicstarter
Thanks, dat was superhandig. :)

Ik heb blijkbaar nog veel te leren over hoe Android werkt :(