Heim >Java >javaLernprogramm >Wie kann ich einen booleschen Wert von einer Android-AsyncTask ordnungsgemäß zurückgeben?
So geben Sie einen booleschen Wert von AsyncTask zurück
In der Android-Programmierung ist AsyncTask eine Klasse, die dazu dient, Hintergrundoperationen in einem separaten Thread auszuführen. In diesem Zusammenhang entsteht die Herausforderung, wenn Sie einen booleschen Wert von einer Async-Aufgabe zurückgeben müssen, da diese asynchron arbeitet.
Stellen Sie sich das Szenario vor, in dem Sie eine Benutzeroberfläche mit EditTexts für FTP-Adresse, Benutzername, Passwort haben. und Hafen. Wenn der Benutzer auf die Schaltfläche „testConnection“ klickt, wird versucht, eine Verbindung herzustellen, und basierend auf dem Verbindungsstatus wird ein boolescher Wert zurückgegeben.
Herausforderung bei der Rückgabe eines booleschen Werts von einer asynchronen Aufgabe
Zunächst sieht der Code möglicherweise ähnlich wie im bereitgestellten Beispiel aus:
boolean status = ftpConnect(_address, _username, _password,_port); ftpDisconnect(); if (status == true) { Toast.makeText(SiteManager.this, "Connection Succesful", Toast.LENGTH_LONG).show(); } else { Toast.makeText(SiteManager.this, "Connection Failed:" + status, Toast.LENGTH_LONG).show(); }
Bei der Verwendung AsyncTask, der Code in doInBackground wird im Hintergrund ausgeführt und die onPostExecute-Methode wird unabhängig vom Ergebnis des Hintergrundvorgangs aufgerufen. Dies bedeutet, dass der boolesche Status in der onPostExecute-Methode nicht verfügbar ist.
Lösung: Implementierung einer Callback-Schnittstelle
Um diese Herausforderung zu meistern, können wir eine Callback-Schnittstelle implementieren . So geht's:
public interface MyInterface { public void myMethod(boolean result); } public class AsyncConnectTask extends AsyncTask<Void, Void, Boolean> { private MyInterface mListener; public AsyncConnectTask(Context context, String address, String user, String pass, int port, MyInterface mListener) { mContext = context; _address = address; _user = user; _pass = pass; _port = port; this.mListener = mListener; } @Override protected Boolean doInBackground(Void... params) { .... return result; } @Override protected void onPostExecute(Boolean result) { if (mListener != null) mListener.myMethod(result); } }
Jetzt in Ihrer Aktivität oder Ihrem Fragment:
AsyncConnectTask task = new AsyncConnectTask(SiteManager.this, _address, _username, _password, _port, new MyInterface() { @Override public void myMethod(boolean result) { if (result == true) { Toast.makeText(SiteManager.this, "Connection Succesful", Toast.LENGTH_LONG).show(); } else { Toast.makeText(SiteManager.this, "Connection Failed:" + status, Toast.LENGTH_LONG).show(); } } }); task.execute();
Dieser Ansatz stellt sicher, dass das Ergebnis von doInBackground über die Callback-Schnittstelle an den UI-Thread zurückgeleitet wird. Sie können myMethod von onPostExecute aus aufrufen, um den Code im UI-Thread auszuführen. Andernfalls müssen Sie ein Runnable über einen Handler veröffentlichen.
Das obige ist der detaillierte Inhalt vonWie kann ich einen booleschen Wert von einer Android-AsyncTask ordnungsgemäß zurückgeben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!