Erst Downloaden -> dann Wert zurückgeben

  • Guten Abend,


    mein Problem ist, dass ich etwas von meinem Server runterladen möchte, was dann ein Boolean auf true setzten soll.
    Seht selbst:


    Java
    public Boolean hasToStop(){        
            downloadData();
            return needToStop;
        }


    Das Problem ist jedoch, dass er nicht darauf wartet bis die Daten runtergeladen sind.
    Ist es irgendwie möglich, dass der Wert erst returnt wird, wenn er fertig gedownloadet hat?

  • vermutlich läuft downloadData ja in einem eigenen thread. Nutze den von Android zur Verfügung gestellten AsyncTask, da kannst du in der onPostExecute methode deine werte auslesen.

    Ja, also ich benutze den Android Asynchronous Http Client.
    Das Problem ist halt, dass er beim fertigen Download den Boolean evtl. (je nach Download) auf einen Wert setzt.
    Jedoch wartet er erst garnicht darauf, dass er fertig ist und den Wert gesetzt hat. Also wird immer ein leerer Boolean returnt.

  • Ich kenn mich mit dieser thirdparty lib nicht aus, das ist kein Android interner Quellcode. Am besten fragst du da beim entwickler der bibliothek nach, ob er eine möglichkeit bietet die ergebnisse aus dem Thread in den UI-Thread zu reichen.


    Edit: Ich hab nur mal kurz auf seine Seite gelunzt (dein link ist übrigens kaputt)

    Da sieht man doch schon, die methoden die du implementieren musst

  • Ich kenn mich mit dieser thirdparty lib nicht aus, das ist kein Android interner Quellcode. Am besten fragst du da beim entwickler der bibliothek nach, ob er eine möglichkeit bietet die ergebnisse aus dem Thread in den UI-Thread zu reichen.


    Edit: Ich hab nur mal kurz auf seine Seite gelunzt (dein link ist übrigens kaputt)

    Da sieht man doch schon, die methoden die du implementieren musst

    Das habe ich auch, das Problem ist nur, dass ich das return-Statement von public Boolean hasToStop() nicht unter onSuccess platzieren kann. (was mein Problem lösen würde)
    Da dann dieser Fehler kommt:


    Zitat von Android-Studio

    Cannot return a value from a method with void result type


    Und ich kann ja nicht schließlich die onSucess Methode verändern?


    Und wenn ich das return-Statement nach den Methoden einfüge (ein public Boolean, den ich dann einfach bei onSucess setze) spuckt er diesen Fehler aus:


    Zitat von Logcat

    java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.Boolean.booleanValue()' on a null object reference

    Da er nicht darauf wartet, bis er fertig runterlädt. Und der Boolean ungesetzt bleibt.

  • logischerweise nicht. In onSuccess kommt als parameter response das ergebnis deiner ausführung, rein. Dieses bytearray muss dann noch in eine geeignete Form gebracht werden.

    Das habe ich schon alles. Ich will nur unter onSucess etwas returnen, dass dann auch unter public Boolean hasToStop() abgerufen wird.


    Also so ungefähr:



    Oder halt so, dass er erst downloadet & somit den Wert setzt und dann den Wert returnt:

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!