1

AChartEngineライブラリを使用してsqlitedatabaseのデータを含むグラフを表示しようとしています。データベースに2つのレコードがあります。レコードが1つある場合に表示される棒グラフグラフ。しかし、データの2つのレコードがある場合、「データセットとレンダラーはnullであってはならず、同じ数の系列を持つ必要があります」と書かれています。私はこれを理解していません。

私のコードは、

    Button ReportGraph = (Button) findViewById(R.id.ReportGraph);
    ReportGraph.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            GraphicalView GraphChartView = ChartFactory.getBarChartView(
                    getApplicationContext(), getWaterElectricityReading(),
                    getDemoRenderer(), Type.DEFAULT);
            // Intent intent=ChartFactory.getLineChartIntent(this,
            // getDemoDataset(), getDemoRenderer());
            // startActivity(intent);
            if (GraphChartView != null) {
                GraphChartView.repaint();
            }
            relChartView.addView(GraphChartView);
            mainLayout.setVisibility(View.GONE);
            relChartView.setVisibility(View.VISIBLE);

        }
    });


private XYMultipleSeriesDataset getWaterElectricityReading() {
    XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();

    SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-mm-dd", Locale.US);
    SimpleDateFormat df2 = new SimpleDateFormat("MMM dd yyyy");

    Date StartDate;
    Date EndDate;
    String Pastdateformat = "";
    String CurrentDateFormat = "";

    SQLiteDatabase DB = Context
            .openOrCreateDatabase("WaterElectricityReadingDataBase.db",
                    MODE_WORLD_READABLE, null);
    Cursor c = DB
            .rawQuery(
                    "select ReadingValue,strftime('%m/%d/%Y',StartDateTime) StartDateTime,strftime('%m/%d/%Y',EndDateTime) EndDateTime from WaterElectricity order by StartDateTime desc ",
                    null);
    int rowCount = c.getCount();

    if (c != null) {
        if (rowCount > 0) {
            if (c.moveToFirst()) {
                do {
                    String ReadingValue = c.getString(c
                            .getColumnIndex("ReadingValue"));
                    String PastDate = c.getString(c
                            .getColumnIndex("StartDateTime"));
                    String CurrentDate = c.getString(c
                            .getColumnIndex("EndDateTime"));
                    try {
                        StartDate = df2.parse(PastDate);
                        Pastdateformat = sdf1.format(StartDate);

                        EndDate = df2.parse(CurrentDate);
                        CurrentDateFormat = sdf1.format(EndDate);
                    } catch (Exception e) {

                    }
                    XYSeries series = new XYSeries(
                            "WaterElectricityReading");
                    double ReadingVal = Double.parseDouble(ReadingValue);
                    series.add(rowCount, ReadingVal);
                    XYMultipleSeriesRenderer render = new XYMultipleSeriesRenderer();


                    dataset.addSeries(series);
                    rowCount++;
                } while (c.moveToNext());
            }
        }
    }
    return dataset;
}

private XYMultipleSeriesRenderer getDemoRenderer() {
    XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer();
    renderer.setAxisTitleTextSize(12);
    renderer.setChartTitleTextSize(12);
    renderer.setLabelsTextSize(15);
    renderer.setLegendTextSize(15);
    renderer.setPointSize(5f);
    renderer.setMargins(new int[] { 20, 30, 15, 0 });
    XYSeriesRenderer r = new XYSeriesRenderer();
    r.setColor(Color.GREEN);
    r.setPointStyle(PointStyle.DIAMOND);
    r.setFillBelowLine(false);
    r.setFillPoints(true);
    renderer.addSeriesRenderer(r);
    setChartSettings(renderer);
    return renderer;
}

private void setChartSettings(XYMultipleSeriesRenderer renderer) {
    renderer.setChartTitle("Chart demo");
    renderer.setXTitle("x values");
    renderer.setYTitle("y values");
    renderer.setApplyBackgroundColor(false);
    renderer.setRange(new double[] { 0, 6, -70, 40 });
    renderer.setFitLegend(false);
    renderer.setAxesColor(Color.BLACK);
    renderer.setShowGrid(true);
    renderer.setXAxisMin(0);
    renderer.setXAxisMax(10.5);
    renderer.setYAxisMin(0);
    renderer.setZoomEnabled(false);
    renderer.setYAxisMax(1000);
}

2つのレコードの場合、2つのバーを表示したいと思います。誰かが間違いを指摘できますか?

どんな助けでも大歓迎です!!

ありがとう。

4

1 に答える 1

5

チャートは、1つのシングルXYMultipleSeriesDatasetと1つのシングルを使用して作成する必要がありますXYMultipleSeriesRenderer

には、にあるのと同じXYMultipleSeriesDataset数が含まれている必要がXYSeriesあります。XYSeriesRendererXYMultipleSeriesRenderer

XYSeriesコードでは、レコードごとにを作成していますが、これはおそらく間違っています。そうしない正当な理由がない限り、データは同じシリーズである必要があります。ただし、複数を追加する場合は、ごとにXYSeries1つ必要になります。XYSeriesRendererXYSeries

于 2013-03-26T11:43:08.103 に答える