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

Android Studio使用GraphView绘制Firebase实时折线图仅显点无连线问题求助

问题根因

你的问题出在每次Firebase数据更新回调时都重新创建了折线序列(LineGraphSeries)和重设图表配置,逻辑错误如下:

  • 每次onDataChange触发时都新实例化一个LineGraphSeries对象,每个序列仅包含当前回调拿到的1个数据点,单个点自然无法绘制连线
  • 每次回调都重复调用graph.addSeries(series),相当于图表里有N个仅含1个点的折线序列,最终视觉上只有散落的数据点
  • 冗余重复执行图表初始化配置,没必要每次数据更新都重新设置缩放、坐标轴边界等参数

修复方案

将折线序列、图表实例作为Activity的全局成员变量,仅在onCreate时初始化一次图表配置,每次Firebase数据更新时仅往同一个已存在的折线序列中追加数据点即可。

修复后代码参考:

// 定义为Activity全局成员变量,不要放在onDataChange内部
private GraphView graph;
private LineGraphSeries<DataPoint> series;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.id.your_layout_name); // 替换为你自己的布局名
    
    // 图表初始化逻辑仅执行一次
    graph = findViewById(R.id.graph);
    series = new LineGraphSeries<>();
    graph.addSeries(series);

    // 图表配置仅执行一次
    graph.getViewport().setScalable(true);
    graph.getViewport().setScalableY(true);
    graph.getViewport().setYAxisBoundsManual(true);
    graph.getViewport().setXAxisBoundsManual(true);
    series.setThickness(8);
    Viewport viewport = graph.getViewport();
    viewport.setMinY(0);
    viewport.setMinX(0);
    viewport.setScrollable(true);
    viewport.setScalable(true);
    series.setDrawBackground(true);
    series.setColor(Color.rgb(117,53,173));
    series.setDataPointsRadius(5);
    series.setAnimated(false);
    series.setDrawDataPoints(true);
    series.setDrawAsPath(true);
    GridLabelRenderer gridLabel = graph.getGridLabelRenderer();

    // Firebase监听仅处理数据追加逻辑
    myRef_1.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot snapshot) {
            String value = snapshot.getValue(String.class);
            textView.setText(value);
            double numValue = Double.parseDouble(value);
            DataPoint point = new DataPoint(2 * numValue, numValue);
            // 直接向全局唯一的折线序列追加数据
            series.appendData(point, true, 10);
        }

        @Override
        public void onCancelled(@NonNull DatabaseError error) {
            Toast.makeText(MainActivity.this, "Nu s-a reusit extragerea datelor din baza de date", Toast.LENGTH_SHORT).show();
        }
    });
}

内容的提问来源于stack exchange,提问作者Grigoras Cosmin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 17:27:03