我希望得到以下问题的帮助。基本上,我正在尝试收集从ASU
方法返回的每个onSignalStrengthsChanged()
结果,并将每个ASU
值放在ArrayList
内,以便可以计算平均ASU值。我尝试了很多不同的方法,却无法得到正确的结果。似乎ArrayList只存储一个ASU值(即当前值)并覆盖先前的ASU值。很感谢任何形式的帮助。我尝试的代码如下;
private class SignalListener extends PhoneStateListener {
@Override
public void onSignalStrengthsChanged(SignalStrength signalStrength) {
Double strengthAmplitude = signalStrength.getGsmSignalStrength();
ArrayList <Double> arrayList = new ArrayList<Double>();
while (arrayList.size() <= 5) { //limit array list collection to 6 elements/ASU values
arrayList.add(strengthAmplitude);
}
for (int i = 0; i < arrayList.size(); i++)
int item = arrayList.get(i);
if (arrayList.size() == 0)
{
System.out.println("Warning! Average can not be calculated");
}
else
{
double total = 0;
for (double element : arrayList)
{
total = total + element;
}
double average = total / arrayList.size();
System.out.println("Average ASU value over sample: " + average);
}
super.onSignalStrengthsChanged(signalStrength);
}
}
答案 0 :(得分:0)
你的问题在于范围界定。每次输入此函数时,您都在创建一个新的数组列表。你没有重用旧的。这意味着你永远不会超过1个值。而且,你的循环很奇怪。
答案 1 :(得分:0)
几点要考虑:
将您的ASU值保存在onSignalStrengthsChanged()外部声明的ArrayList中 - 正如Gabe所提到的,您每次都在创建新的ArrayList&#39; onSignal ..&#39;触发,所以你的arrayList包含一个项目;将arrayList移到onSignalStrengthsChanged()之外,这样,您就可以将ASU读数添加到您的成员变量arrayList中,并且您将能够计算平均值
重点:
for(int i=0; i<arrayList.size(); i++)
int item = arrayList.get(i);
???
在Android中,建议使用Log方法代替&#39; System.out&#39;