2017-02-06 68 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)); 

啤酒的时间。