2012-02-17 33 views
11

Ở đây, tôi đang cố gắng để chuyển đổi các giá trị bản đồ vào chuỗi mảng nhưng tôi đang nhận đượcconvert Bản đồ giá trị vào mảng chuỗi

Lỗi

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

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

String results [] = (String[]) contactNumber.values().toArray(); 

Trả lời

21

Bạn nên sử dụng phương pháp toArray(T[] a) khác.

String[] result = contactNumber.values().toArray(new String[0]); 
6

Bạn có thể không thực hiện các diễn viên như thế này. Thay vào đó, hãy gọi phương thức toArray khác:

String[] result = contactNumber.values().toArray(new String[0]); 
4

Bạn đang gọi phương thức toArray() trả về mảng Đối tượng. Thay vào đó, chuyển sang toArray (T [] a) sẽ giúp bạn giải quyết vấn đề. Các javadocs sẽ giúp làm rõ thêm câu trả lời.

/** 
* 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); 
Các vấn đề liên quan