Ich habe eine Methode, die einige Daten einschließlich Koordinaten der Standorte von API herunterlädt und ein Array auffüllt. Ich rufe diese Methode in onCreate
dann in onMapReady
Ich rufe eine andere Methode, die die Markierungen auf Karte setzt. Ich habe nur zwei Testobjekte, die jetzt zu meiner Karte hinzugefügt werden können, so dass es nicht viel Zeit kostet, sie herunterzuladen und anzuzeigen, aber manchmal führt sie die spätere Methode aus, bevor ich die Daten heruntergeladen habe. Es zeigt also keine Markierungen.warten, bis die Methode beendet ist, dann gehen Sie auf die nächste Zeile Android
Ich habe verschiedene Ansätze wie AsyncTask versucht, aber dieser führt immer die spätere Methode, bevor die erste abgeschlossen ist.
hier ist mein Code
private class AsynchronouslyDoSomeStuff extends AsyncTask<Void, Void, Void>{
@Override
protected Void doInBackground(Void... params) {
Log.v("Donkey", "Async doInBackground Called");
downloadCustomersData();
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
Log.v("Donkey", "Async onPostExecute Called");
updateMapMarkers();
}
}
und dann new AsynchronouslyDoSomeStuff().execute();
in onMapReady
nennen, aber wie ich sagte, es funktioniert nicht.
Hinweis: Ich möchte keine Dinge wie Thread.wait(some time);
verwenden, weil ich nicht weiß, wie viel Zeit es später für andere Kunden braucht.
Der Code, den Sie gepostet haben, wird genau das tun, was Sie brauchen, aber nur, wenn 'downloadCustomersData()' synchron ist. Wenn es asynchron ist, wird es nicht abgeschlossen, bevor 'onPostExecute' aufgerufen wird. Es hängt wirklich alles davon ab, was 'downloadCustomersData' tut. – Kuffs
@Kuffs ist es nicht möglich, synchrone Netzwerkoperationen auf dem Haupt-Thread durchzuführen. Das würde zu einer "NetworkOnMainThreadException" führen. – F43nd1r
Dies ist eine AsyncTask und nicht der Haupt-Thread, daher sind Netzwerk-Operationen sowohl synchron als auch asynchron erlaubt. – Kuffs