J'ai tout essayé, mais rien ne fonctionne. J'essaie d'appeler un Api, ce qui fonctionne. Cependant, onPostExecute() n'est pas appelé ce qui fait que mon callback ne fonctionne pas.AsyncTask: onPostExecute() n'est pas invoqué
C'est ma classe AsyncTask:
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);
}
}
C'est là que AsyncTask est appelée:
public void getString() {
if (url != null) {
RetrieveInput input = new RetrieveInput();
input.execute(url);
}
}
C'est là mon rappel se trouve:
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;
}
}
Merci à l'avance !
doInBackground() est-il appelé ou même pas? – Kriti
On l'appelle! La chaîne de résultat contient le code JSON –
Peut-être que le serveur prend trop de temps à répondre. Essayez d'utiliser 'connection.setConnectTimeout (10000);' pour vous assurer que la fonction retourne toujours.Essayez également de déboguer votre application en plaçant des points d'arrêt sur différentes lignes de votre méthode 'doInBackground'. –