Tache Asynchrone et AlertDialogue ?
Salut, je suis débutante en android et je galère sur un point :
j'ai crée une tache asynchrone dans une activité pour récupérer une liste d'objet en appelant un web service... Je recupère bien l'objet (une liste d'objet avec plusieurs attributs) que je stocke dans un tableau. J'arrive bien à lire ce tableau dans le "do in background " de la tache mais en "post execute " et ailleurs dans l'activité, le tableau est nul. Je pensais avant que la valeur d'entrée de post execute était la valeur de retour de "do in background". Du moins c'était le cas avec les taches que j'ai utilisé auparavant mais je n'utilisais pas de tableau ou de liste...
Comment faire pour récupérer ce tableau hors de ma tache asynchrone dans une même activité ?
En gros ce que je veux faire c'est récupérer ce tableau de compte et afficher le nom de chaque compte dans une alertdialogue contenant une liste.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139
| public class accueil extends Activity {
private Compte[]compteUtilisateurs = null;
static final int COMPTE_DIALOG_ID = 998;
private int idUtilisateur = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.accueil);
}
@Override
protected Dialog onCreateDialog(int id) {
switch (id) {
case COMPTE_DIALOG_ID:
final List<Integer> mSelectedItems = new ArrayList<Integer>();
List<CharSequence> mHelperNames = new ArrayList<CharSequence>();
for (int i = 0 ; i<compteUtilisateurs.length; i++){
mHelperNames.add(compteUtilisateurs[i].getNomCompte());
System.out.println (compteUtilisateurs[i]);
}
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Mes comptes")
.setMultiChoiceItems(mHelperNames.toArray(new CharSequence[mHelperNames.size()]), null,
new DialogInterface.OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialog,
int which, boolean isChecked) {
if (isChecked) {
mSelectedItems.add(which);
} else if (mSelectedItems.contains(which)) {
mSelectedItems.remove(Integer
.valueOf(which));
}
}
} );
builder.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {}
})
.setNegativeButton("Annuler", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {}
});
return builder.create();
}
return null;
}
/////////////////////////////////////Compte///////////////////////////////////////////////////
public void choisircompte(View view){
DepenseTask fraisTask = new DepenseTask();
fraisTask.execute(idUtilisateur);
//System.out.println(compteUtilisateurs[0]);
///je lance ma tache pour recuperer le tableau de compte et l'utiliser dans le dialogue
showDialog(COMPTE_DIALOG_ID);
}
///////////////////////////////////////Tache Asynk/////////////////////////////////////////////////////////
class DepenseTask extends AsyncTask<Integer,Void,Compte[] >
{
@Override
protected void onPreExecute() {
}
@Override
protected Compte[] doInBackground(Integer... arg) {
// TODO Auto-generated method stub
SoapObject request4 = new SoapObject("", "");
SoapSerializationEnvelope envelope4 = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope4.dotNet = true;
request4.addProperty("idUtilisateur",idUtilisateur);
envelope4.setOutputSoapObject(request4);
HttpTransportSE androidHttpTransport4 = new HttpTransportSE("");
try {
androidHttpTransport4.debug = true;
androidHttpTransport4.call("", envelope4);
SoapObject resultsRequestSOAP4 = (SoapObject)envelope4.bodyIn;
Compte[] compteUtilisateurs = new Compte[resultsRequestSOAP4.getPropertyCount()];
for (int i = 0 ; i<compteUtilisateurs.length; i++){
SoapObject soChild = (SoapObject)resultsRequestSOAP4.getProperty(i);
Compte si = new Compte();
si.setNomCompte(soChild.getPropertyAsString("nomCompte").toString());
si.setTypeCompte(soChild.getPropertyAsString("typeCompte").toString());
si.setIdCompte(Integer.parseInt(soChild.getPropertyAsString("idCompte").toString()));
si.setSeuilMaxGeneralCompte(Double.parseDouble(soChild.getPropertyAsString("seuilMaxGeneralCompte").toString()));
si.setSeuilMinGeneralCompte(Double.parseDouble(soChild.getPropertyAsString("seuilMinGeneralCompte").toString()));
DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
Date date = null;
si.setDateCreationCompte(formatter.parse(soChild.getPropertyAsString("dateCreationCompte").toString()));
date = formatter.parse(soChild.getPropertyAsString("dateCreationCompte").toString());
compteUtilisateurs[i]= si ;
System.out.println (compteUtilisateurs[i]);
}
} catch (Exception e) {
e.printStackTrace();}
return compteUtilisateurs;
}
@Override
protected void onPostExecute(Compte[] result) {
//System.out.println(result[0]);
}
}
} |
Merci