Android - aChartEngine getCurrentSeriesAndPoint()不适用于断开连接的图形

时间:2013-04-02 13:01:03

标签: android graph achartengine

我正在使用aChartEngine和windspeed将风向绘制为TimeChartView中的xyseries(windspeed是使用左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();

我假设将null值插入到我的系列中会使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();
                }                   
            }
        });

我的logcat:

  

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):at org.achartengine.chart.XYChart.getSeriesAndPointForScreenCoordinate(XYChart.java:845)   04-02 16:05:18.575:E / AndroidRuntime(29182):at 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):at java.lang.reflect.Method.invokeNative(Native Method)   04-02 16:05:18.575:E / AndroidRuntime(29182):at 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):at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:773)   04-02 16:05:18.575:E / AndroidRuntime(29182):at dalvik.system.NativeStart.main(Native Method)

1 个答案:

答案 0 :(得分:1)

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