2017-10-20 41 views
-1

J'essaie de passer un entier à une tâche asynchrone et d'accéder à une liste par cet index.Impossible d'utiliser un entier comme index de tableau

Cependant, je reçois cette erreur "dans la liste ne peut pas être appliquée".

Voici le code approprié.

La tâche asynchrone n'accepte pas la primitive int comme argument.

src = new ArrayList<String>(); 
String message = ""; 
for (int i=0; i<src.size(); i++) { 
    new AsyncTask<Integer, Void, Void>() { 
    @Override 
    protected Void doInBackground(Integer... pos) { 
     ... 
     message += **src.get(pos)**; 
     ...  
     } 
    }.execute(i); 
} 

Répondre

2

Vous passez un varargs, traduisible dans un Integer[] comme argument pour votre appel ArrayList#get, qui ne compilera pas - voir ListAPI.

Vous devez sélectionner l'élément souhaité de vos varargs, par ex. pos[0], qui sera déballé à un int.

2

C'est un paramètre varargs qui est fondamentalement un Array. Vous devez y accéder avec l'index par ex.

message += src.get(pos[0]); 
1

Le paramètre que vous transmettez pour obtenir l'élément de la collection est fondamentalement un tableau. Par conséquent, si vous envoyez plusieurs valeurs int lors de l'exécution de la tâche asynchrone, vous devez utiliser l'index de la valeur que vous avez transmise. Dans votre cas, le code doit accéder à l'index de la manière suivante:

message += src.get(pos[0]);