2017-01-03 2 views
0

Ich habe eine WWW-Klasse, die jedes Mal erstellt wird, wenn GetData Funktion mit der gleichen URL aufgerufen wird.Wie man eine WWW-Klasse neu lädt?

Jetzt, wenn ich es ausführen, das erste Mal GetData Funktion ruft die URL, die angefordert wird (ich habe einen Haltepunkt im Webservice). Dann wird das andere Mal Get Data aufgerufen und das WWW installiert, es wird mit den Daten gefüllt, ohne die Anfrage zu machen (mein Breakpoint im Dienst wird nicht getroffen.).

Aber ich würde gerne jedes Mal einen neuen Anruf tätigen, wenn GetData aufgerufen wird. (Um den Webservice abzufragen)

Wie würde ich ein solches Verhalten ermöglichen? Was mache ich falsch? Vielen Dank im Voraus!

void Start() { 
     InvokeRepeating("GetData", 1.0f, 1.0f); 
    } 

void GetData() 
    { 
     WWW www = new WWW(url); 

     while (!www.isDone && string.IsNullOrEmpty(www.error)) 
     { 
     }  

     www.Dispose();  
    } 
+0

Es ist nicht meine WWW Klasse es ist Einheit. Und die Schleife ist nicht das Problem. Ich habe getestet, indem ich vor der Schleife einen Haltepunkt gesetzt habe und mehrmals getroffen wurde. – Joh

+0

Hast du schon mal nachgesehen, ob irgendwas in "www.error" ist? Versuchen Sie, einen Haltepunkt bei "www.Dispose" zu setzen und sehen Sie, ob etwas darin ist. – Bauss

+0

www.error ist immer null – Joh

Antwort

0

Das Problem war, dass die Daten irgendwie eingelöst wurden. Ich löste das Problem wie folgt aus:

WWW www = new WWW(url + "?t=" + Random.value); 

Auf diese Weise jedes Mal, wenn ich eine neue WWW erstellen Außerdem erstelle ich eine neue Anforderung durch eine verschiedene URL (immer noch die gleiche Funktion aufrufen).

Es wäre besser, Geld für eine WWW-Anfrage insgesamt auszuschalten. Aber das funktioniert auch.

2

Sie verwenden Coroutine nicht ordnungsgemäß. Tatsächlich wird Ihr Snippet normalerweise als falsche Implementierung angesehen. Sie erhalten das Programm in der Schleife stecken, bis es fertig ist.

void Start() { 
    InvokeRepeating("GetData", 1.0f, 1.0f); 
} 

void GetData() 
{ 
    StartCoroutine(GetDataCoroutine())  
} 
IEnumerator GetDataCoroutine() 
{ 
    WWW www = new WWW(url); 
    yield return www; 
    if(string.IsNullOrEmpty(www.error) == false){ Debug.Log(www.error); } 
    www.Dispose(); 
} 
+0

danke für deine antwort! Dein Code ist besser, aber er löst mein Problem nicht. – Joh

Verwandte Themen