使用未排序ArrayList绘制Linear GraphView触发异常求助
解决GraphView绘制线性图时的X值排序异常问题
这个问题我之前也碰到过!原因很明确——GraphView的线性图系列要求传入的X轴数据必须严格按升序排列,你的ArrayList里的X值是乱序的,所以触发了BaseSeries里的checkValueOrder校验,直接抛出了IllegalArgumentException。
下面是具体的解决步骤:
第一步:对数据列表按X值升序排序
不管你是用自定义数据类还是GraphView自带的DataPoint,都可以通过Collections.sort来完成排序:如果你用自定义数据类(比如存储X、Y值的
GraphData):// 假设你的数据类结构 public class GraphData { private double x; private double y; public GraphData(double x, double y) { this.x = x; this.y = y; } public double getX() { return x; } public double getY() { return y; } } // 排序逻辑 ArrayList<GraphData> dataList = new ArrayList<>(); // 先往dataList中添加你的数据 // 按X值从小到大排序 Collections.sort(dataList, (d1, d2) -> Double.compare(d1.getX(), d2.getX()));如果你直接用GraphView的
DataPoint:ArrayList<DataPoint> dataPoints = new ArrayList<>(); // 添加数据后执行排序 Collections.sort(dataPoints, (dp1, dp2) -> Double.compare(dp1.getX(), dp2.getX()));第二步:将排序后的数据传入GraphView系列
排序完成后,再把数据转换成数组传入LineGraphSeries:LineGraphSeries<DataPoint> series = new LineGraphSeries<>(dataPoints.toArray(new DataPoint[0])); // 或者如果是自定义类,需要先转换成DataPoint数组 // LineGraphSeries<DataPoint> series = new LineGraphSeries<>(convertToDataPoints(dataList)); graphView.addSeries(series);
额外提醒:如果是动态添加数据的场景,要么确保每次新增的X值都比之前的最大值大,要么在所有数据添加完成后统一执行一次排序,这样就能彻底避免这个异常啦。
内容的提问来源于stack exchange,提问作者Saad Malhas
相关产品推荐
相关产品推荐

