Ich verwende asynchrone Aufgabe, um Daten aus meiner Datenbank zu erhalten. ich habe:Ergebnis von Async-Task in Nicht-Aktivitätsklasse
public class BackgroundDatabaseTask extends AsyncTask<String, Void, String> {
String jsonData;
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected String doInBackground(String... values) {
String jsonData = Driver.returnJsonDataFromDatabase(values[0]);
return jsonData;
}
@Override
protected void onProgressUpdate(Void... values) {
super.onProgressUpdate(values);
}
@Override
protected void onPostExecute(String result) {
jsonData = result;
}
}
Und in anderer Klasse verwende ich es mag:
private static String returnJsonDataBackgroundTaskExecute(String fromWhichTableGetData) {
try {
return new BackgroundDatabaseTask().execute(fromWhichTableGetData).get();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
return "Error in BackgroundDatabaseTask";
}
Aber get()
meinen Haupt-Thread zu blockieren. Also, wie kann ich Ergebnis meiner asynchronen Aufgabe in anderen Nicht-Aktivitätsklassen erhalten? Ich möchte dies in Nicht-Aktivität-Klasse ausführen, so meine Klasse OnCreate-Methode nicht, aber ich habe Aktivität von meiner MainActivity-Klasse.
UPDATE: Jetzt löse ich dieses Problem mit Thread, aber es ist eine gute Lösung?
Runnable runnable = new Runnable() {
@Override
public void run() {
listOfDataFromDatabase = GetterDataFromDatabase.returnJsonDataBackgroundTaskExecute(tableNameFromWhichIGetData);
}
};
Thread thread = new Thread(runnable);
thread.start();
try {
thread.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
jetzt habe ich Zugang zu diesem varaible listOfDataFromDatabase
in anderen Verfahren.
„Ich denke, das Problem ist, wo einige sonst in deinem Code "Wie du später sagst, ist das Problem mit dem Aufruf von' get() ', der den Haupt-Thread blockiert, bis die AsyncTask beendet ist. –
sollten Sie das nicht tun, obwohl es für Entwickler vorgesehen ist, das zu verwenden, aber wir werden eine parallele Aufgabe verwenden, um Jobs schneller auszuführen, da wir get() nicht verwenden können. –