J'essaie d'obtenir les données du serveur. D'une certaine façon, l'interface utilisateur se fige malgré le fait que je fais toutes les connexions et l'extraction de données dans la méthode doinbackground. J'apprécierai beaucoup si quelqu'un m'aide, parce que j'ai examiné toutes les questions sur ce sujet et n'ai pas trouvé la solution.Android AsyncTask fige l'interface utilisateur
public class GetMessagesActivity extends AsyncTask<String, Void, String> {
private Context context;
private ProgressDialog progressDialog;
public GetMessagesActivity(Context context) {
this.context = context;
this.progressDialog = new ProgressDialog(context);
this.progressDialog.setCancelable(false);
this.progressDialog.setMessage("Updating...");
this.progressDialog.show();
}
protected void onPreExecute() {
}
@Override
protected String doInBackground(String... arg0) {
try {
String pid = "1";
String link = "somelink";
String data = URLEncoder.encode("pid", "UTF-8") + "="
+ URLEncoder.encode(pid, "UTF-8");
// data += "&" + URLEncoder.encode("password", "UTF-8")
// + "=" + URLEncoder.encode(password, "UTF-8");
URL url = new URL(link);
URLConnection conn = url.openConnection();
conn.setDoOutput(true);
OutputStreamWriter wr = new OutputStreamWriter(
conn.getOutputStream());
wr.write(data);
wr.flush();
BufferedReader reader = new BufferedReader(new InputStreamReader(
conn.getInputStream()));
StringBuilder sb = new StringBuilder();
String line = null;
// Read Server Response
while ((line = reader.readLine()) != null) {
sb.append(line);
break;
}
return sb.toString();
} catch (Exception e) {
return new String("Exception: " + e.getMessage());
}
}
@Override
protected void onProgressUpdate(Void... values) {
super.onProgressUpdate(values);
}
@Override
protected void onPostExecute(String result) {
if (this.progressDialog != null) {
this.progressDialog.dismiss();
}
}
}
Vous ne l'avez pas montré comment vous exécuter la tâche. Je vais prendre un coup et deviner que vous utilisez 'get()' qui bloque le thread appelant. – ashishduh
Vous avez raison. J'ai enlevé le get() et utilisé execute() et cela fonctionne parfaitement. Merci beaucoup – Alexander