在Android应用中使用多个数据库值绘制图表

时间:2012-06-08 04:53:18

标签: android sql view nullpointerexception runtimeexception

我目前正在使用afreechart在我的Android应用中绘制图表。我正在使用TimeSeries图表,他们已经在他们的示例应用程序中进行了示例。对我来说,数据要从两个数据库中提取。两个问题: 1.如何使用我的两个数据库中的值绘制此TimeSeries图? 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 TimeSeries示例: 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

再次感谢您的时间。 :)

0 个答案:

没有答案