我正在使用 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。主要(本机方法)