Wie kriege ich den Response der API in mein TextViewField in Android Studio?

1 Antwort

Vom Fragesteller als hilfreich ausgezeichnet

Das Prinzip hinter asynchronen Tasks liegt darin, dass nachfolgender Code nicht explizit auf ihre Vollendung wartet, da unbestimmt ist, wann ihre Aktion überhaupt beendet werden kann. Würde der Vorgang synchron ablaufen, würde so etwas wie der Verbindungsaufbau und Datentransport mit der API den Hauptprozess blockieren, der darauf wartet, das Textfeld mit Text füllen zu können.

Stattdessen dient die onPostExecute-Methode als Callback. Sobald die Ausführung (doInBackground) beendet ist, wird sie aufgerufen. In dieser Methode solltest du also auch den Text erst in das Textfeld setzen.

Eine Referenz auf die Komponente könntest du via Konstruktor übergeben.

class PostRequestTask extends AsyncTask<String, Void, String> {
  private final TextView textView;

  public PostRequestTask(TextView view) {
    this.textView = view;
  }

  /* ... */

  @Override
  protected void onPostExecute(String result) {
    textView.setText(result);
  }
}

oder du nutzt ein Command Pattern, um einen eigenen Callback von außen zu integrieren und somit die Task-Klasse stärker von der Activity zu entkoppeln.

public interface PostExecutable {
  void execute(String result);
}

public class PostRequestTask extends AsyncTask<String, Void, String> {
  private final PostExecutable finalTask;

  public PostRequestTask(PostExecutable finalTask) {
    this.finalTask = finalTask;
  }

  /* ... */

  @Override
  protected void onPostExecute(String result) {
    finalTask.execute(result);
  }
}

// MainActivity:
var task = new PostRequestTask(new PostExecutable() {
  @Override
  public void execute(String result) {
    yourTextView.setText(result);
  }
});
task.execute();