我已从项目中复制了一些代码,并希望在我的私有应用中重用其中的一小部分。
该类包含稀疏数组
public class GolfResult {
String hcpAfter;
String hcpBefore;
SparseArray roundResults;
public GolfResult() {
hcpAfter = "";
hcpBefore = "";
roundResults = new SparseArray();
}
}
我为ArrayList
创建了一个充满必要数据的roundResults
。
然后我试图用内容填充实例。
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 List
欢迎任何帮助。
在收到两个有用的答案之后我又向前迈了一步,但现在我遇到的问题是我的SparseArray hu是空的{}。
胡的内容应该是具有以下结构的班级结果:
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
hu = {}
mValues = All elements are null
mSize = 0
有人知道为什么吗?
答案 0 :(得分:2)
如果我理解你的问题,也许你可以试试这个:
for ( int i=0; i<roundresults.size(); i++ ) {
hu.put(i,roundresults.get(i));
}
答案 1 :(得分:1)
SparseArray与documentation:
中的ArrayList不同SparseArrays 将整数映射到对象。不像普通的数组 对象,索引中可能存在空白。它的目的是更多 内存比使用HashMap将Integers映射到Objects更有效 因为它避免了自动装箱键,其数据结构并不依赖 在每个映射的额外入口对象上。
它使用键值对原则,其中键是整数,键映射是对象的值。你需要使用put [(int key,E value)](https://developer.android.com/reference/android/util/SparseArray.html#put(int,E)),其中E是你的对象。请记住:
添加从指定键到指定值的映射, 从指定密钥替换以前的映射(如果有) 之一。
所以你需要使用一个循环来添加ArrayList中的每个对象,如@ valentino-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));
}
答案 2 :(得分:0)
经过一些试验和错误后,我找到了空胡的解决方案:
而不是把我使用追加,现在它正在工作。
hu.append(i, roundresults.get(i));
啤酒的时间。