0

伙计们 - 使用 aChartEngine 绘制时间序列图时,我得到了一个神秘的 IllegalArgumentException。这是尝试呈现图表的代码片段:

private GraphicalView chartView;
private XYMultipleSeriesDataset dataset;
private XYMultipleSeriesRenderer renderers;

dataset = new XYMultipleSeriesDataset();
TimeSeries series = new TimeSeries(varLongName);
for(int i=0;i<values.size();i++) 
    series.add(quarterDates.get(i), values.get(i));
dataset.addSeries(series);

renderers = new XYMultipleSeriesRenderer();
double YMin=0f;
double YMax=0f;

XYSeriesRenderer render = new XYSeriesRenderer();
render.setColor(Color.RED);
render.setPointStyle(PointStyle.CIRCLE);
render.setFillPoints(true);
render.setLineWidth(2f);
YMin=dataset.getSeriesAt(0).getMinY();
YMax=dataset.getSeriesAt(0).getMaxY();
renderers.addSeriesRenderer(render);
renderers.setXTitle("Date");
renderers.setYTitle(varShortName);
renderers.setAxesColor(Color.GREEN);
renderers.setChartTitle(currentBankName+" "+varShortName+".");
renderers.setAxisTitleTextSize(16f);
renderers.setYLabelsAlign(Align.RIGHT);
renderers.setYLabelsPadding(5f);
renderers.setLabelsTextSize(12f);
renderers.setLegendTextSize(12f);

Log.d(TAG,"YMin is initially set to: "+YMin);
YMin -=5f;
Log.d(TAG,"YMin is now set to: "+YMin);
Log.d(TAG,"YMax is initially set to: "+YMax);
YMax +=5f;
Log.d(TAG,"YMax is now set to: "+YMax);
renderers.setYAxisMin(YMin);
Log.d(TAG, "Set YAxis Min on renderer");
renderers.setYAxisMax(YMax);
Log.d(TAG, "Set YAxis Max on renderer");

chartView = ChartFactory.getTimeChartView(this, dataset, renderers, "dd-MMM-yyyy");
Log.d(TAG, "Created chartView");
plotArea.addView(chartView, new LayoutParams(LayoutParams.MATCH_PARENT, 250));

我添加了很多调试消息来定位问题,但仍然遇到问题。从它的外观来看,似乎有些东西是 -Inf 或类似的东西,但我可能完全走错了路。我还包括活动的布局文件。

布局文件

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:background="@drawable/background"
tools:context=".MyPerformance" >

<TextView
    android:id="@+id/HelloUser"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/hello"
    android:layout_marginTop="5dp"
    android:textColor="@color/strong_black"
    android:textSize="16sp"
    android:textStyle="bold"
    android:layout_marginLeft="5dp" />

<TextView
    android:id="@+id/ReportForBank"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@id/HelloUser"
    android:layout_alignLeft="@id/HelloUser"
    android:text="@string/reportForBank"
    android:layout_marginTop="10dp"
    android:textColor="@color/strong_black"
    android:textSize="12sp"
    android:textStyle="bold" />

<Spinner
    android:id="@+id/PerfVarSpinner"
    android:layout_width="250dp"
    android:layout_height="wrap_content"
    android:layout_below="@id/ReportForBank"
    android:layout_alignLeft="@id/ReportForBank"
    android:prompt="@string/var_prompt" />

<ImageView
    android:id="@+id/HelpOnVarIcon"
    android:layout_width="36dp"
    android:layout_height="36dp"
    android:layout_toRightOf="@id/PerfVarSpinner"
    android:layout_alignTop="@id/PerfVarSpinner"
    android:src="@drawable/help"
    android:contentDescription="@string/help"
    android:clickable="true"
    android:onClick="showDescription" />

<FrameLayout 
    android:layout_width="match_parent"
    android:layout_height="250dp"
    android:layout_below="@id/PerfVarSpinner"
    android:layout_alignLeft="@id/ReportForBank"
    android:background="@color/black_overlay"
    android:id="@+id/PlotArea" />

<TextView
    android:id="@+id/Recommendations"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@id/PlotArea"
    android:layout_alignLeft="@id/PlotArea"
    android:text="@string/recommendation"
    android:layout_marginTop="10dp"
    android:textColor="@color/strong_black"
    android:textSize="12sp"
    android:textStyle="bold" />

任何帮助将非常感激。这是 logcat 输出:

08-08 18:25:57.909: D/com.ssjanus.bankstats.MyPerformance(2404): YMin is initially set to: 318580.0
08-08 18:25:57.909: D/com.ssjanus.bankstats.MyPerformance(2404): YMin is now set to: 318575.0
08-08 18:25:57.909: D/com.ssjanus.bankstats.MyPerformance(2404): YMax is initially set to: 318580.0
08-08 18:25:57.919: D/com.ssjanus.bankstats.MyPerformance(2404): YMax is now set to: 318585.0
08-08 18:25:57.919: D/com.ssjanus.bankstats.MyPerformance(2404): Set YAxis Min on renderer
08-08 18:25:57.919: D/com.ssjanus.bankstats.MyPerformance(2404): Set YAxis Max on renderer
08-08 18:25:57.939: D/com.ssjanus.bankstats.MyPerformance(2404): Created chartView
08-08 18:25:58.079: D/AndroidRuntime(2404): Shutting down VM
08-08 18:25:58.079: W/dalvikvm(2404): threadid=1: thread exiting with uncaught exception (group=0x409c01f8)
08-08 18:25:58.129: E/AndroidRuntime(2404): FATAL EXCEPTION: main
08-08 18:25:58.129: E/AndroidRuntime(2404): java.lang.IllegalArgumentException: -5.585327982E13 > -1.1170655964E14
08-08 18:25:58.129: E/AndroidRuntime(2404):     at java.util.TreeMap$BoundedMap.<init>(TreeMap.java:1110)
08-08 18:25:58.129: E/AndroidRuntime(2404):     at java.util.TreeMap.subMap(TreeMap.java:704)
08-08 18:25:58.129: E/AndroidRuntime(2404):     at org.achartengine.model.XYSeries.getRange(XYSeries.java:305)
08-08 18:25:58.129: E/AndroidRuntime(2404):     at org.achartengine.chart.XYChart.draw(XYChart.java:254)
08-08 18:25:58.129: E/AndroidRuntime(2404):     at org.achartengine.GraphicalView.onDraw(GraphicalView.java:168)
08-08 18:25:58.129: E/AndroidRuntime(2404):     at android.view.View.draw(View.java:10978)
08-08 18:25:58.129: E/AndroidRuntime(2404):     at android.view.ViewGroup.drawChild(ViewGroup.java:2887)
08-08 18:25:58.129: E/AndroidRuntime(2404):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2489)
08-08 18:25:58.129: E/AndroidRuntime(2404):     at android.view.View.draw(View.java:10981)
08-08 18:25:58.129: E/AndroidRuntime(2404):     at android.widget.FrameLayout.draw(FrameLayout.java:450)
08-08 18:25:58.129: E/AndroidRuntime(2404):     at android.view.ViewGroup.drawChild(ViewGroup.java:2887)
08-08 18:25:58.129: E/AndroidRuntime(2404):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2489)
08-08 18:25:58.129: E/AndroidRuntime(2404):     at android.view.View.draw(View.java:10981)
08-08 18:25:58.129: E/AndroidRuntime(2404):     at android.view.ViewGroup.drawChild(ViewGroup.java:2887)
08-08 18:25:58.129: E/AndroidRuntime(2404):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2489)
08-08 18:25:58.129: E/AndroidRuntime(2404):     at android.view.View.draw(View.java:10981)
08-08 18:25:58.129: E/AndroidRuntime(2404):     at android.widget.FrameLayout.draw(FrameLayout.java:450)
08-08 18:25:58.129: E/AndroidRuntime(2404):     at android.view.ViewGroup.drawChild(ViewGroup.java:2887)
08-08 18:25:58.129: E/AndroidRuntime(2404):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2489)
08-08 18:25:58.129: E/AndroidRuntime(2404):     at android.view.ViewGroup.drawChild(ViewGroup.java:2885)
08-08 18:25:58.129: E/AndroidRuntime(2404):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2489)
08-08 18:25:58.129: E/AndroidRuntime(2404):     at android.view.View.draw(View.java:10981)
08-08 18:25:58.129: E/AndroidRuntime(2404):     at android.widget.FrameLayout.draw(FrameLayout.java:450)
08-08 18:25:58.129: E/AndroidRuntime(2404):     at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:2126)
08-08 18:25:58.129: E/AndroidRuntime(2404):     at android.view.ViewRootImpl.draw(ViewRootImpl.java:2026)
08-08 18:25:58.129: E/AndroidRuntime(2404):     at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1634)
08-08 18:25:58.129: E/AndroidRuntime(2404):     at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2442)
08-08 18:25:58.129: E/AndroidRuntime(2404):     at android.os.Handler.dispatchMessage(Handler.java:99)
08-08 18:25:58.129: E/AndroidRuntime(2404):     at android.os.Looper.loop(Looper.java:137)
08-08 18:25:58.129: E/AndroidRuntime(2404):     at android.app.ActivityThread.main(ActivityThread.java:4424)
08-08 18:25:58.129: E/AndroidRuntime(2404):     at java.lang.reflect.Method.invokeNative(Native Method)
08-08 18:25:58.129: E/AndroidRuntime(2404):     at java.lang.reflect.Method.invoke(Method.java:511)
08-08 18:25:58.129: E/AndroidRuntime(2404):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
08-08 18:25:58.129: E/AndroidRuntime(2404):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
08-08 18:25:58.129: E/AndroidRuntime(2404):     at dalvik.system.NativeStart.main(Native Method)
08-08 18:25:58.739: I/dalvikvm(2404): threadid=3: reacting to signal 3
08-08 18:25:58.760: I/dalvikvm(2404): Wrote stack traces to '/data/anr/traces.txt'

更新:好吧,我想我在茶杯里掀起了一场风暴!对于那个很抱歉。事实证明,日期格式错误导致此异常。

4

1 回答 1

1

事实证明,日期格式错误导致此异常。我正在使用 SimpleDateFormat 将日期从 sql 日期格式(yyyy-MM-dd)转换为 java.util.Date,这没问题,除了我错误地抓住了日期的“年份”部分,例如,将年份设置为 200 2007 年。这引发了异常。

于 2013-08-13T07:26:02.470 回答