Ich habe alles versucht, aber nichts funktioniert.AsyncTask: onPostExecute() wird nicht aufgerufen
Ich versuche eine Api aufzurufen, die funktioniert. OnPostExecute() wird jedoch nicht aufgerufen, was dazu führt, dass mein Callback nicht funktioniert.
Das ist mein AsyncTask Klasse:
class RetrieveInput extends AsyncTask<String, String, String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected String doInBackground(String... params) {
try {
URL url = new URL(params[0]);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
InputStream stream = connection.getInputStream();
Scanner s = new Scanner(stream).useDelimiter("\\A");
String result = s.hasNext() ? s.next() : "";
return result;
} catch (IOException ex) {
Log.d("Error", "Error fetching data");
Log.d("STACKTRACE", ex.getStackTrace().toString());
}
return null;
}
@Override
protected void onPostExecute(String result) {
repo.setString(result);
}
}
Hier wird die AsyncTask aufgerufen wird:
public void getString() {
if (url != null) {
RetrieveInput input = new RetrieveInput();
input.execute(url);
}
}
Dies ist, wo mein Rückruf befindet: Voraus
public class UserRepository implements IRepository {
private Connection connection;
private String result;
private Gson gson;
public UserRepository() {
this.connection = new Connection(this);
this.gson = new Gson();
}
public User find(String userName) {
connection.setUrl("http://10.0.2.2:8080/api-0.1.0/users/get/" + userName);
connection.getString();
User user = gson.fromJson(this.result, User.class);
return user;
}
@Override
public void setString(String result) {
this.result = result;
}
}
Danke !
wird doInBackground() aufgerufen oder auch das ist nicht? – Kriti
Es wird aufgerufen! Die Ergebniszeichenfolge enthält die JSON –
. Möglicherweise dauert die Antwort des Servers zu lange. Verwenden Sie 'connection.setConnectTimeout (10000);', um sicherzustellen, dass die Funktion immer zurückkehrt.Versuchen Sie auch, Ihre App zu debuggen, indem Sie Haltepunkte in verschiedenen Zeilen Ihrer 'doInBackground'-Methode platzieren. –