13

Here ,I am trying to convert map values into String array but i am getting

Error

ERROR/AndroidRuntime(23588): Caused by: java.lang.ClassCastException: [Ljava.lang.Object;

Code

Map<String,String> contactNumber = new HashMap<String,String>(); 

String results [] =  (String[]) contactNumber.values().toArray();
Hunt
  • 8,215
  • 28
  • 116
  • 256

3 Answers3

26

You should use the other toArray(T[] a) method.

String[] result = contactNumber.values().toArray(new String[0]);
user802421
  • 7,465
  • 5
  • 40
  • 63
7

You can't perform the cast like this. Instead, call the other toArray method:

String[] result = contactNumber.values().toArray(new String[0]);
MByD
  • 135,866
  • 28
  • 264
  • 277
4

You are invoking the toArray() method on the Collection interface which returns an Object array. Switching instead to toArray(T[] a) should help you solve the problem. The javadocs should help clarify the answer further.

/**
 * Returns an array containing all of the elements in this collection.
 * If this collection makes any guarantees as to what order its elements
 * are returned by its iterator, this method must return the elements in
 * the same order.
 *
 * <p>The returned array will be "safe" in that no references to it are
 * maintained by this collection.  (In other words, this method must
 * allocate a new array even if this collection is backed by an array).
 * The caller is thus free to modify the returned array.
 *
 * <p>This method acts as bridge between array-based and collection-based
 * APIs.
 *
 * @return an array containing all of the elements in this collection
 */
Object[] toArray();

/**
 * Returns an array containing all of the elements in this collection;
 * the runtime type of the returned array is that of the specified array.
 * If the collection fits in the specified array, it is returned therein.
 * Otherwise, a new array is allocated with the runtime type of the
 * specified array and the size of this collection.
 *
 * <p>If this collection fits in the specified array with room to spare
 * (i.e., the array has more elements than this collection), the element
 * in the array immediately following the end of the collection is set to
 * <tt>null</tt>.  (This is useful in determining the length of this
 * collection <i>only</i> if the caller knows that this collection does
 * not contain any <tt>null</tt> elements.)
 *
 * <p>If this collection makes any guarantees as to what order its elements
 * are returned by its iterator, this method must return the elements in
 * the same order.
 *
 * <p>Like the {@link #toArray()} method, this method acts as bridge between
 * array-based and collection-based APIs.  Further, this method allows
 * precise control over the runtime type of the output array, and may,
 * under certain circumstances, be used to save allocation costs.
 *
 * <p>Suppose <tt>x</tt> is a collection known to contain only strings.
 * The following code can be used to dump the collection into a newly
 * allocated array of <tt>String</tt>:
 *
 * <pre>
 *     String[] y = x.toArray(new String[0]);</pre>
 *
 * Note that <tt>toArray(new Object[0])</tt> is identical in function to
 * <tt>toArray()</tt>.
 *
 * @param a the array into which the elements of this collection are to be
 *        stored, if it is big enough; otherwise, a new array of the same
 *        runtime type is allocated for this purpose.
 * @return an array containing all of the elements in this collection
 * @throws ArrayStoreException if the runtime type of the specified array
 *         is not a supertype of the runtime type of every element in
 *         this collection
 * @throws NullPointerException if the specified array is null
 */
<T> T[] toArray(T[] a);
Dave Jarvis
  • 30,436
  • 41
  • 178
  • 315
Scorpion
  • 3,938
  • 24
  • 37