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

Android-aChartEngine getCurrentSeriesAndPoint()不适用于断开连接的图形,android,graph,achartengine,Android,Graph,Achartengine,我正在使用aChartEngine和windspeed(windspeed是使用左y轴的时间序列,winddir是使用右y轴的xyseries)在时间图表视图中将风向绘制为xyseries 我面临的问题是,随着风向向北移动,我的值在0和360之间移动,在我的图形中创建了一条丑陋的垂直线。我更希望,如果值增加到360以上,图形将被剪裁并恢复到0。通过过滤这些值并在我的XYSeries中插入MathHelper.NULL_值(请参见代码),我成功地获得了我想要的图形 double windDirT

我正在使用aChartEngine和windspeed(windspeed是使用左y轴的时间序列,winddir是使用右y轴的xyseries)在时间图表视图中将风向绘制为xyseries

我面临的问题是,随着风向向北移动,我的值在0和360之间移动,在我的图形中创建了一条丑陋的垂直线。我更希望,如果值增加到360以上,图形将被剪裁并恢复到0。通过过滤这些值并在我的XYSeries中插入MathHelper.NULL_值(请参见代码),我成功地获得了我想要的图形

 double windDirTemp=0; 

现在的问题是我的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.getseriesandpointforscreencoordination(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):在com.example.hellogogleMaps.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.Invokenactive(本机方法) 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):在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.main(本机方法)


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

也许向我们展示您的
OnClickListener
'代码和stacktrace会有帮助吗?我建议您更新到最新版本:@Dan:谢谢最新版本:)您做得很好!但是问题仍然存在,我的logcat报告了相同的错误…请发布一个小示例,我可以用它来复制问题。如果有bug,我会修复它,但我需要一个复制它的测试用例。@Dan我已经检查确认如果我用例如double[]visions={2000,2500,MathHelper.NULL_VALUE,2100,2800}交换这些值;双[]视图={2200270029028003200};应用程序崩溃,并出现相同的错误报告。我需要设置multiRenderer.setYAxisMin(0);多渲染器.setYAxisMax(4000);查看数据。效果很好:)非常感谢!我的代码中仍然存在这个问题。它似乎在某些方面起作用,而在其他方面则不起作用。它是否可能不适用于图形的插值部分?谢谢。你好@Dan我有这个类型的值。双[]X={1,2,3,4,5};double[]Y={2200,MathHelper.NULL_值,2900,MathHelper.NULL_值,3200};所以在这里我想画一条线,但跳过空值,在需要间隙的地方画一条线,在这个值之间画一条线,我该怎么做?
/**
         * 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();
                }                   
            }
        });