Wie kann man nichts tun oder nichts tun auf AsyncTask Ergebnis?
Mein Ziel ist einfach, geben Sie eine Adresse ein, klicken Sie auf eine Schaltfläche, um eine URL zu testen, wenn nicht das erwartete Ergebnis erhalten, eine Toast-Info und dann nichts tun. Wenn das Ergebnis erwartet wird, fahren Sie mit dem Programm fort.
Da ich URL in UIhread nicht verwenden kann, habe ich AsyncTask verwendet, das Problem ist: obwohl ich das Ergebnis von AsyncTak weiß, wie ich Aktivität zu tun oder nichts zu tun? Was ich will, ist eine Aussage in der OnClickListener wie folgt aus:
if (result is not expected) return; else continue do things.
ich obige Aussage in OnPostExecute nicht schreiben kann, wird er zurückkehren OnPostExecute(), nicht OnClickListener().
Eine andere ist: auch wenn ich das Ergebnis an Aktivität weitergeben kann (nämlich an onClickLIstener()), wahrscheinlich, wenn das Ergebnis ankommt, führen UI-Thread bereits einige andere Codes, aber sie sollten nicht bevor Sie das Ergebnis wissen.
Kurz gesagt, ich brauche das URL-Ergebnis, um zu entscheiden, wie verbleibende Codes ausgeführt werden, daher kann async-Task nicht verwendet werden, was soll ich tun?
Danke.
Unten ist der Beispielcode:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
btnConfirm.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new XXX().execute(code);
});
}
class XXX extends AsyncTask<String, Void, String> {
protected String doInBackground(String... strArr) {
XXXXX;
}
protected void onPostExecute(String result) {
XXXXX;
}
}
Nun Netzwerk-Aufgaben sollten asynchron sowieso durchgeführt werden, können Sie sicherstellen, dass nichts anderes auf der MainUI passiert, indem Sie eine Art unbestimmter Fortschrittsbalken verwenden. Setze es auf sichtbar, wenn du die asynctask startest und setze es dann auf unsichtbar 'onPostExecute() 'und mache den Rest der Dinge, die du tun musst. – wanpanman
klingt gut, könnten Sie mir bitte mehr Details erzählen? Neben, was ist der normalste Weg für eine solche Aufgabe: Basis auf URL-Ergebnis zu tun oder nichts in Aktivität. ? – caibirdcnb
Es hängt davon ab, was Sie tun. Wenn Sie etwas haben, das eine ständige Verbindung zu einem Server erfordert, würden Sie wahrscheinlich einen Thread verwenden, der kontinuierlich ausgeführt wird und dann die MainUI mit einem Handler kontaktiert. Wenn es etwas ist, das einmal ist, wie ein Knopf klicken und dann etwas passiert, dann ist die asynctask ein guter Weg zu gehen. Wenn Sie sich die Antwort von Eenvincible unten ansehen, rufen Sie einfach diese Funktion in 'onPostExecute()' auf und setzen Sie alles, was Sie in dieser Funktion tun müssen. Wenn Sie irgendeine Art von Ergebnis benötigen, dann fügen Sie der Funktion Argumente hinzu, z.'private void executeOnAsyncSuccess (String result)' – wanpanman