String von AsyncTask ohne Activity an Activity übertragen

  • Hallo liebe Android-Developers Gemeinde,


    bin erst seit kurzem an der Android Entwicklung dran und bin nun leider auf ein für mich unlösbares Problem gestoßen.


    Zur Problemstellung:


    Ich habe eine GUI aus mehreren Activitys und einen AsnyncTask welcher die TCP Verbindungen verarbeitet. Innerhalb meines AsyncTasks empfange ich Strings via TCP Verbindung. Nun möchte ich die empfangenen Strings irgendwie in meine Activitys bekommen. Hab nun schon vergeblich gegoogelt, mit onPost, interface und handler rum probiert aber ich bekomms nicht zum laufen :(


    Ich wäre über jede Hilfe sehr dankbar.


    AsyncTask:


    und hier meine Activity:



    Bin wirklich für jede Hilfe mehr als dankbar

  • Zunächst einmal passt der Ansatz nicht ganz.
    Du möchtest in der OnCreate den String aus dem Async Task empfangen. Da der Task asynchron läuft, ist das in 99,99% der Fälle nicht möglich, weil der String leer ist. (In der unglaublich kurzen Zeit bekommt Dein Task noch keine Info zurück und kann dementsprechend nix anzeigen. Und die OnCreate wartet auch nicht auf Deinen Task, er ist ja asynchron.)


    Sinnvoller wäre es, Du definierst eine Callback Methode in Deiner Activity, die Dein AsyncTask im onProgressUpdate aufruft.


    Am Besten ein Interface definieren:


    Jede Activity muss dann dieses Interface implementieren.

    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.


    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«

  • primär würde ich dir empfehlen dich über Synchron und Asynchron zu informieren. Dazu gibts einige gute Erklärungen im Netz.


    Marco hat dir die richtige Lösung bereits gepostet, aber du musst sie ja noch verstehen. In dem Zusammenhang lohnt es auch sich über funktionsweise von selbstgeschriebenen Listenern zu informieren.

  • Da du dein TCPClient-Objekt, welches deine doInBackground-Methode zurückgeben könnte, ohnehin nicht zurück gibst ("return null;"), könntest du stattdessen deine Methode wie folgt deklarieren:

    Java
    protected String[] doInBackground(String... strings)


    Und dann kannst du diesea zurückgegebene String-Array in onPostExecute weiter verarbeiten:

    Java
    protected void onPostExecute(String[] strings)


    Ich habe diese Infos bei http://www.programmierenlernen…se-threads-und-asynctask/ gefunden - vielleicht hilft dir das ja insgesamt auch weiter. Ich meine, dass das Ergebnis des dort verwendeten AsyncTask-Objekts auch in einer späteren Lektion noch weiterverarbeitet wird. Leider finde ich das gerade nicht mehr.

Jetzt mitmachen!

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