J'ai le code suivant :
String[] where;
where.append(ContactsContract.Contacts.HAS_PHONE_NUMBER + "=1");
where.append(ContactsContract.Contacts.IN_VISIBLE_GROUP + "=1");
Ces deux ajouts ne sont pas compilés. Comment cela pourrait-il fonctionner correctement ?
La taille d'un tableau ne peut pas être modifiée. Si vous voulez un tableau plus grand, vous devez en instancier un nouveau.
Une meilleure solution serait d'utiliser un [ArrayList
][1] qui peut grandir selon vos besoins. La méthode ArrayList.toArray( T[] a )
vous rend votre tableau si vous en avez besoin sous cette forme.
List<String> where = new ArrayList<String>();
where.add( ContactsContract.Contacts.HAS_PHONE_NUMBER+"=1" );
where.add( ContactsContract.Contacts.IN_VISIBLE_GROUP+"=1" );
Si vous avez besoin de le convertir en un simple tableau...
String[] simpleArray = new String[ where.size() ];
where.toArray( simpleArray );
Mais la plupart des choses que vous faites avec un tableau peuvent aussi être faites avec cette ArrayList :
// iterate over the array
for( String oneItem : where ) {
...
}
// get specific items
where.get( 1 );
[1] : http://java.sun.com/javase/7/docs/api/java/util/ArrayList.html
Utilisez une [List<String>
][1], comme un [ArrayList<String>
][2]. Elle peut croître dynamiquement, contrairement aux tableaux (voir : Effective Java 2e édition, point 25 : Préférer les listes aux tableaux).
import java.util.*;
//....
List<String> list = new ArrayList<String>();
list.add("1");
list.add("2");
list.add("3");
System.out.println(list); // prints "[1, 2, 3]"
Si vous insistez pour utiliser des tableaux, vous pouvez utiliser [java.util.Arrays.copyOf
][3] pour allouer un tableau plus grand pour accueillir l'élément supplémentaire. Ce n'est cependant pas la meilleure solution.
static <T> T[] append(T[] arr, T element) {
final int N = arr.length;
arr = Arrays.copyOf(arr, N + 1);
arr[N] = element;
return arr;
}
String[] arr = { "1", "2", "3" };
System.out.println(Arrays.toString(arr)); // prints "[1, 2, 3]"
arr = append(arr, "4");
System.out.println(Arrays.toString(arr)); // prints "[1, 2, 3, 4]"
C'est O(N)
par append
. ArrayList
, d'un autre côté, a un coût amorti de O(1)
par opération.
[Tutoriels Java/Arrays][4]
[Didacticiels Java/L'interface Liste][5]
[1] : http://java.sun.com/javase/7/docs/api/java/util/List.html [2] : http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html [3] : http://docs.oracle.com/javase/7/docs/api/java/util/Arrays.html#copyOf%28T%5B%5D,%20int%29 [4] : http://java.sun.com/docs/books/tutorial/java/nutsandbolts/arrays.html [5] : http://java.sun.com/docs/books/tutorial/collections/interfaces/list.html
Comme l'a dit Tangens, la taille d'un tableau est fixe. Mais vous devez d'abord l'instancier, sinon il ne sera qu'une référence nulle.
String[] where = new String[10];
Ce tableau ne peut contenir que 10 éléments. Vous ne pouvez donc ajouter une valeur que 10 fois. Dans votre code, vous accédez à une référence nulle. C’est pourquoi cela ne fonctionne pas. Afin d'avoir une collection qui croît dynamiquement, utilisez ArrayList.