2017-02-06 71 views
0

我已經從項目中複製了一些代碼,並且希望在我的私有應用程序中重新使用它的一小部分代碼。將數組列表轉換爲稀疏數組

類包含一個稀疏數組

public class GolfResult { 

    String hcpAfter; 
    String hcpBefore; 
    SparseArray roundResults; 

    public GolfResult() { 
     hcpAfter = ""; 
     hcpBefore = ""; 
     roundResults = new SparseArray(); 
    } 
} 

我爲roundResults填充有必要的數據創建的ArrayList

然後我試圖用內容填充實例。

GolfResult golferRes = new GolfResult(); 
SparseArray<RoundResults> hu= new SparseArray<>(); 
hu = roundresults; // * 
golferRes.setHcpAfter("33"); 
golferRes.setHcpBefore("kk"); 
golferRes.setRoundResults(hu); 

但問題是,hu = roudresults是不可能的,因爲錯誤消息:

要求:Android.util.SparseArray發現:java.util.Array列表

任何幫助將受到歡迎。

在收到兩個有用的答案後,我又進了一步,但現在我面臨的問題是我的SparseArray hu是空{}。

胡的含量應該是類roundresults具有以下結構:

public class RoundResults { 
boolean actualRound; 
private List<HoleResult> holeResults; 
Integer roundId; 
Integer roundNumber; 
String unfinishedReason; 

該ArrayList roundresults具有1的大小,並且具有在對象的數據。

unfinishedReason ="" 
holeResults = ArrayLIST size= 18 
roundID = "1" 
roundNumber = "1" 
actualRound = true 

胡= {}

mValues = All elements are null 
mSize = 0 

沒有任何人有一個想法,爲什麼?

+0

你應該考慮驗證幫助你的答案。 – AnixPasBesoin

+0

SparseArrays等價於HashMaps而不是ArrayLists – mayosk

回答

1

如果我沒有理解好你的問題,也許你可以用這個嘗試:

for (int i=0; i<roundresults.size(); i++) { 
    hu.put(i,roundresults.get(i)); 
} 
0

SparseArray比ArrayList的不同,從documentation

SparseArrays地圖整數對象。與 對象的正常數組不同,對象可能在索引中存在空位。它旨在比使用HashMap將整數映射到對象更有效率,因爲它避免了自動裝箱鍵,並且其數據結構不會依賴 對每個映射的額外入口對象。

它使用鍵值對原理,其中鍵是一個整數並且鍵映射是對象的值。你需要使用put [(int key,E value)](https://developer.android.com/reference/android/util/SparseArray.html#put(int,E)),其中E是你的對象。記住:

從指定鍵到指定值, 從指定鍵如果有 一個更換以前的映射添加一個映射。

所以你需要使用一個循環添加的每個對象在你的ArrayList作爲@華倫天奴-S說:

SparseArray<RoundResults> hu= new SparseArray<>(); 
for(int i = 0; i < roundresults.size(); i++) { 
    // i as the key for the object. 
    hu.put(i, roundresults.get(i)); 
} 
+0

感謝您的回答,現在我可以避免錯誤消息,但SparseArray hu = {},雖然roundresults.get(0)已填充並具有以下類結構:public class RoundResults {0} {0} {0} {0} actualRound; 私有列表 holeResults; 整型roundId; 整型roundNumber; String unfinishedReason; – Peter

+1

我無法理解你評論的意思。你能否詳細說明一下。 –

0

一些經過試用和錯誤,我發現了空胡的解決方案:

而不是把我使用append,它現在正在工作。

hu.append(i, roundresults.get(i)); 

啤酒的時間。