You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android开发:无法在两个Activity间传递ArrayList<Double>

解决ArrayList在Activity间传递的类型不兼容问题

嘿,我一眼就瞅出问题所在啦!你在两个Activity里用了不匹配的传递/获取方式,直接导致了类型错误,我帮你一步步修正,顺便还会指出代码里的其他小疏漏~

问题根源

你在Activity1中传递的是**ArrayList<Double>对象**,但在Activity2里却用getDoubleArrayExtra("winnings")去获取——这个方法返回的是double[](基本类型数组),和ArrayList<Double>完全是两种类型,自然会报“类型不兼容”的错误。

解决方案:正确传递&获取ArrayList

因为ArrayList<Double>实现了Serializable接口,所以可以直接通过Intent传递,只需要修改Activity2的获取逻辑即可:

修正后的Activity2代码

public class SummaryActivity extends AppCompatActivity { 
    ArrayList<Double> winnings = new ArrayList<>(); 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.activity_summary); 
        setTitle("Summary"); 
        // 注意:你这里重复定义了lblAverage,我帮你修正了变量名对应正确的TextView
        TextView lblTournaments = (TextView) findViewById(R.id.txtTournaments); 
        TextView lblTotal = (TextView) findViewById(R.id.txtTotal); 
        TextView lblMax = (TextView) findViewById(R.id.txtMax); 
        TextView lblMin = (TextView) findViewById(R.id.txtMin); 
        TextView lblAverage = (TextView) findViewById(R.id.txtAverage); 
        
        Intent i = getIntent(); 
        // 用getSerializableExtra获取,注意强制类型转换
        @SuppressWarnings("unchecked")
        ArrayList<Double> receivedWinnings = (ArrayList<Double>) i.getSerializableExtra("winnings");
        if(receivedWinnings != null) {
            winnings = receivedWinnings;
        }
        
        // 这里可以继续写求和、计算最大最小等逻辑
        // 比如计算总和:
        double total = 0;
        for(double win : winnings) {
            total += win;
        }
        lblTotal.setText("Total: " + total);
    } 
}

额外修正:Activity1里的小bug

你在btnClear_OnClick方法里的判断条件错了:集合的size()永远不会小于0,应该判断是否为0:

public void btnClear_OnClick(View v) { 
    // 把 winnings.size() < 0 改成 winnings.size() == 0
    if(winnings.size() == 0) { 
        displayToast("You have no winnings to clear"); 
    }else { 
        winnings.clear(); 
        displayToast("Cleared"); 
    } 
}

另一种可选方案:转成double数组传递

如果你更倾向于用数组传递,也可以这么做:

  1. 在Activity1传递时,把ArrayList转成double数组:
// 把ArrayList转成double数组
double[] winningsArray = new double[winnings.size()];
for(int j=0; j<winnings.size(); j++){
    winningsArray[j] = winnings.get(j);
}
i.putExtra("winnings", winningsArray);
  1. 在Activity2里获取数组,再转成ArrayList:
double[] winningsArray = i.getDoubleArrayExtra("winnings");
if(winningsArray != null) {
    winnings = new ArrayList<>(Arrays.asList(Arrays.stream(winningsArray).boxed().toArray(Double[]::new)));
}

不过第一种方案更直接,适合新手使用~

内容的提问来源于stack exchange,提问作者Mark Riley

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:55:47