2

我目前正在使用 afreechart 在我的 Android 应用程序中绘制图表。我正在使用他们在示例应用程序中举例说明的 TimeSeries 图表。对我来说,要从两个数据库中提取数据。两个问题: 1. 如何使用我的两个数据库中的值绘制这个时间序列图?2. 整个图表并不像人们想要的那样平滑。特别是在滚动或轻弹时。因此,它与应用程序设计不一致。有什么办法可以让它更流畅吗?

如果上面的问题似乎没有必要或在某种程度上是错误的,请指出我可以使用多个数据库值绘制图形的方法,即使它不使用 afreechart。谢谢。

我尝试在 createDataset() 中使用简单的“for”循环,例如:

private static XYDataset createDataset() {

 mfirstDbHelper.open();
     msecondDbHelper.open();

     int firstdb_count = (int) DatabaseUtils.queryNumEntries(mfirstDbHelper.mDb,firstDbAdapter.DATABASE_TABLE);
     int seconddb_count = (int) DatabaseUtils.queryNumEntries(msecondDbHelper.mDb,secondDbAdapter.DATABASE_TABLE);

     TimeSeriesCollection dataset = new TimeSeriesCollection();

     for(int i=1;i<=seconddb_count;i++){
         Cursor seconddb = msecondDbHelper.fetchItem(i);

         TimeSeries s1 = new TimeSeries(seconddb.getString(
                seconddb.getColumnIndexOrThrow(secondDbAdapter.KEY_ITEMNAME)));

            for(int j=1;j<=firstdb_count;j++){
                    Cursor firstdb = mfirstDbHelper.fetchItem(j);
                    int first_sp_id = Integer.parseInt(firstdb.getString(
        firstdb.getColumnIndexOrThrow(firstDbAdapter.KEY_ID)));

                    if(first_sp_id == i){

                        int value = Integer.parseInt(firstdb.getString(
                                    firstdb.getColumnIndexOrThrow(firstDbAdapter.KEY_VALUE)));
                        String date = firstdb.getString(
                                    firstdb.getColumnIndexOrThrow(firstDbAdapter.KEY_DATE));


                String dateParts[] = date.split("-");
                String day = dateParts[0];
                String month = dateParts[1];
                String year = dateParts[2];
                int d = Integer.parseInt(day);
                int m = Integer.parseInt(month);
                int y = Integer.parseInt(year);


                        s1.add(new Day(d,m,y), value);
                        dataset.addSeries(s1);
                    }
                    firstdb.close();
                }
        seconddb.close();
        }

     mfirstDbHelper.close();
     msecondDbHelper.close();



     return dataset;

}
}

我已将示例中的 Month() 更改为 Day(),并确保该区域没有错误。我收到错误:

ERROR/AndroidRuntime(706): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.kev/com.kev.MyProject}: java.lang.NullPointerException  

此外,很明显,这段代码一遍又一遍地重绘图形“s1”。我不知道如何克服这个问题,以及错误。我对编程还是相当陌生,尤其是 Android 应用程序开发,所以上面的任何错误,请随意打我的脑袋并更正我的代码。

哦,还有一件事,我不能使用 startManagingCursor() 因为它是 DemoView 而不是 Activity。所以,不知道它是否会导致任何问题。

Afreechart 时间序列示例: http ://code.google.com/p/afreechart/source/browse/#svn%2Ftrunk%2Fafreechart_sample%2Fsrc%2Forg%2Fafree%2Fchart%2Fdemo

Afreechart TimeSeries 示例 - 查看: http ://code.google.com/p/afreechart/source/browse/trunk/afreechart_sample/src/org/afree/chart/demo/view/TimeSeriesChartDemo01View.java

感谢你的宝贵时间。:)

4

0 回答 0