2013-05-10 39 views
-2

我擁有從android.preference.MultiSelectListPreference複製的完整代碼。我面臨的怪異編譯錯誤以下內部類:Android包裹類錯誤

1號線是原代碼,我已經添加#行2

對於2號線

類型不匹配:不能轉換無效爲String []

和 對於未註釋的行#1

在該行 多個標記 - 類型不匹配:不能從空隙轉換爲字符串[] - 該方法readStringArray(字符串[])中的類型包裹不適用於()的參數

private static class SavedState extends BaseSavedState { 
     Set<String> values; 

     public SavedState(Parcel source) { 
      super(source); 
      values = new HashSet<String>(); 
      //String[] strings = source.readStringArray(); //Line #1 
      String[] strings = source.readStringArray(values.toArray(new String[0])); //Line #2 

      final int stringCount = strings.length; 
      for (int i = 0; i < stringCount; i++) { 
       values.add(strings[i]); 
      } 
     } 

     public SavedState(Parcelable superState) { 
      super(superState); 
     } 

     @Override 
     public void writeToParcel(Parcel dest, int flags) { 
      super.writeToParcel(dest, flags); 
      dest.writeStringArray(values.toArray(new String[0])); 
     } 

     public static final Parcelable.Creator<SavedState> CREATOR = 
       new Parcelable.Creator<SavedState>() { 
      public SavedState createFromParcel(Parcel in) { 
       return new SavedState(in); 
      } 

      public SavedState[] newArray(int size) { 
       return new SavedState[size]; 
      } 
     }; 
    } 

我非常喜歡這些編譯錯誤!我實際上正在編寫自己的多選擇偏好,但面對上面提到的唯一的錯誤,並且沒有解決它的想法。

感謝任何幫助。

+1

閱讀文檔... http://developer.android.com/reference/android/os/Parcel.html#readStringArray(java.lang.String[])如果您仍然不會讀取它.. 。 然後再次 ... – Selvin 2013-05-10 12:25:59

回答

2

方法readStringArray()沒有返回值,這就是編譯器抱怨的原因。您需要將它作爲參數傳遞給一個字符串數組,並填充您提供給它的字符串數組。

你叫readStringArray()這樣的:

的String [] =東西新的String [5]; //包中的數組已知有5個元素 source.readStringArray(things);

這隻適用於如果你確切知道包裹中的字符串數組有多大。如果數組總是固定的大小,你可以使用這個。如果不是,則需要將數組的大小寫入Parcel之前您編寫數組,然後Parcel的讀者可以首先讀取數組的大小,然後創建一個適當大小的字符串數組以接收數據。