2

我正在使用 aChartEngine 和风速将风向绘制为 TimeChartView 中的 xyseries(风速是使用左 y 轴的时间序列,winddir 是使用右 y 轴的 XYSeries)。

我面临的问题是,当 windirection 向北经过时,我的值在 0 到 360 之间移动,在我的图表中创建了一条难看的垂直线。我希望如果值增加到 360 以上,图形刚刚被剪裁并恢复为 0。通过过滤值并在我的 XYSeries 中插入 MathHelper.NULL_VALUE(参见代码),我设法得到了我想要的图形

 double windDirTemp=0; 

...

    if (Math.abs(windDirValues[k] - windDirTemp)>300 ){
                windDirTemp = windDirValues[k];     
                windDirSeries.add(convertedDateinDouble[k], MathHelper.NULL_VALUE );                
            }
            else{
                windDirSeries.add(convertedDateinDouble[k], windDirValues[k]);
            }   

现在的问题是我的 OnClickListener 不再工作了。该应用程序崩溃

SeriesSelection seriesSelection = mChart.getCurrentSeriesAndPoint();

我假设将空值插入我的系列会使 getCurrentSeriesAndPoint 无法获取 SeriesIndex 并且可能与不再连接的图形有关。

我将不胜感激任何帮助解决这个问题。我可以以不同的方式过滤值吗?我可以尝试 getCurrentSeriesAndPoint() 的替代方法吗?

谢谢,克里斯蒂安

编辑:

我正在使用 achartengine-1.1.0-rc2

我的 OneClickListener:

/**
         * Setting a click event listener for the graph
         */
        mChart.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Format formatter = new SimpleDateFormat("HH:mm");

                SeriesSelection seriesSelection = mChart.getCurrentSeriesAndPoint();                

                if (seriesSelection != null) {
                    int seriesIndex = seriesSelection.getSeriesIndex();
                    String selectedSeries = "Vindhastighet";
                    String unit = " m/s";

                    if (seriesIndex == 0)
                        selectedSeries = "Vindhastigheten";
                    else if (seriesIndex == 1)
                        selectedSeries = "Vindkast";
                    else {
                        selectedSeries = "Vindretningen";
                        unit = "\u00B0";
                    }

                    // Getting the clicked Date ( x value )
                    long clickedDateSeconds = (long) seriesSelection
                            .getXValue();
                    Date clickedDate = new Date(clickedDateSeconds);
                    String strDate = formatter.format(clickedDate);

                    // Getting the y value
                    int amount = (int) seriesSelection.getValue();

                    // Displaying Toast Message
                    Toast.makeText(
                            getBaseContext(),
                            selectedSeries + " kl " + strDate + " var "
                                    + amount + unit, Toast.LENGTH_LONG)
                            .show();
                }                   
            }
        });

我的日志猫:

04-02 16:05:18.575:E/AndroidRuntime(29182):致命异常:主要 04-02 16:05:18.575:E/AndroidRuntime(29182):java.lang.NullPointerException 04-02 16:05:18.575: E/AndroidRuntime(29182): 在 org.achartengine.chart.XYChart.getSeriesAndPointForScreenCoordinate(XYChart.java:845) 04-02 16:05:18.575: E/AndroidRuntime(29182): 在 org.achartengine.GraphicalView.getCurrentSeriesAndPoint(GraphicalView .java:137) 04-02 16:05:18.575: E/AndroidRuntime(29182): at com.example.hellogooglemaps.WindChartActivity$1.onClick(WindChartActivity.java:116) 04-02 16:05:18.575: E/ AndroidRuntime(29182): 在 android.view.View.performClick(View.java:4211) 04-02 16:05:18.575: E/AndroidRuntime(29182): 在 android.view.View$PerformClick.run(View.java :17267) 04-02 16:05:18.575: E/AndroidRuntime(29182): 在 android.os.Handler.handleCallback(Handler.java:615) 04-02 16:05:18.575: E/AndroidRuntime(29182): 在 android.os.Handler.dispatchMessage(Handler.java:92) 04-02 16:05:18.575: E/AndroidRuntime(29182) : 在 android.os.Looper.loop(Looper.java:137) 04-02 16:05:18.575: E/AndroidRuntime(29182): 在 android.app.ActivityThread.main(ActivityThread.java:4898) 04-02 16:05:18.575: E/AndroidRuntime(29182): 在 java.lang.reflect.Method.invokeNative(Native Method) 04-02 16:05:18.575: E/AndroidRuntime(29182): 在 java.lang.reflect。 Method.invoke(Method.java:511) 04-02 16:05:18.575: E/AndroidRuntime(29182): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1006) 04-02 16:05:18.575: E/AndroidRuntime(29182): 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:773) 04-02 16:05:18.575: E/AndroidRuntime(29182): 在 dalvik .system.NativeStart。主要(本机方法)

4

1 回答 1

1

这是 AChartEngine 中的一个错误,现在已修复。您可以在此处下载包含此修复程序的版本。

于 2013-04-04T17:45:21.320 回答