0
我是新的OOP用戶。如何分隔Achartengine中的主要代碼和圖表代碼(Android)
我在Android有一個簡單的問題。
我想用
new DrawMonthLineChart(titles, x, y).getChartView()
GET線圖表視圖。
(如果我在主代碼結合圖表代碼文件,折線圖碼正確)
我拿drawchart部分獨立的文件。 。
,但它會顯示在此錯誤(下文)
View chart = ChartFactory.getCubeLineChartView(this, dataset, renderer, 0.14f);
這是下面的錯誤信息:
The method getCubeLineChartView(Context, XYMultipleSeriesDataset, XYMultipleSeriesRenderer, float) in the type ChartFactory is not applicable for the arguments (DrawMonthLineChart, XYMultipleSeriesDataset, XYMultipleSeriesRenderer, float)
我認爲這個問題是「這個」沒有意思背景。
我不知道如何解決「這個」的東西。
有沒有人可以幫我一把嗎?
非常感謝。
我主要的代碼如下:
package net.test.achartenginedemo;
import java.util.ArrayList;
import java.util.List;
import org.achartengine.ChartFactory;
import org.achartengine.chart.PointStyle;
import org.achartengine.model.XYMultipleSeriesDataset;
import org.achartengine.model.XYSeries;
import org.achartengine.renderer.XYMultipleSeriesRenderer;
import org.achartengine.renderer.XYSeriesRenderer;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Color;
import android.graphics.Paint.Align;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup.LayoutParams;
import android.widget.LinearLayout;
public class AchartengineMain extends Activity {
private LinearLayout ll ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_achartengine_main);
ll = (LinearLayout) findViewById(R.id.chartLL);
String[] titles = new String[] { "line1"};
List<double[]> x = new ArrayList<double[]>();
List<double[]> y = new ArrayList<double[]>();
x.add(new double[] { 1, 2.2, 3.4, 4.6, 5.8, 10 });
y.add(new double[] { 80, 78, 75, 82, 75, 78 });
ll.addView(new DrawMonthLineChart(titles, x, y).getChartView(), new LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,LinearLayout.LayoutParams.WRAP_CONTENT));
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.achartengine_main, menu);
return true;
}
}
我drawMonthChart代碼如下:
package net.test.achartenginedemo;
import java.util.List;
import org.achartengine.ChartFactory;
import org.achartengine.chart.PointStyle;
import org.achartengine.model.XYMultipleSeriesDataset;
import org.achartengine.model.XYSeries;
import org.achartengine.renderer.XYMultipleSeriesRenderer;
import org.achartengine.renderer.XYSeriesRenderer;
import android.graphics.Color;
import android.graphics.Paint.Align;
import android.view.View;
public class DrawMonthLineChart {
private String[] titles = new String[] { "line1" };
private List<double[]> x;
private List<double[]> y;
public DrawMonthLineChart(String[] titles, List<double[]> x , List<double[]> y){
this.titles = titles;
this.x = x;
this.y = y;
}
public View getChartView()
{
XYMultipleSeriesDataset dataset = buildDaset(titles, x, y);
int[] colors = new int[] { Color.BLUE };
PointStyle[] styles = new PointStyle[] { PointStyle.CIRCLE};
XYMultipleSeriesRenderer renderer = buildRenderer(colors, styles, true);
setChartSettings(renderer, "line chart test", "", "", 50, 200,-1, 13,
Color.BLACK,x);
// ------------------***************here*******-------------
View chart = ChartFactory.getCubeLineChartView(this, dataset, renderer, 0.14f);
// ------------------***************here*******-------------
return chart;
}
private XYMultipleSeriesDataset buildDaset(String[] titles,
List<double[]> xValues, List<double[]> yValues) {
XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();
int length = titles.length;
for (int i = 0; i < length; i++) {
XYSeries series = new XYSeries(titles[i]);
double[] xV = xValues.get(i);
double[] yV = yValues.get(i);
int seriesLength = xV.length;
for (int k = 0; k < seriesLength; k++) {
series.add(xV[k], yV[k]);
}
dataset.addSeries(series);
}
return dataset;
}
private XYMultipleSeriesRenderer buildRenderer(int[] colors,
PointStyle[] styles, boolean fill) {
XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer();
int length = colors.length;
for (int i = 0; i < length; i++) {
XYSeriesRenderer r = new XYSeriesRenderer();
r.setColor(colors[i]);
r.setPointStyle(styles[i]);
r.setFillPoints(fill);
r.setLineWidth(2.5f);
renderer.addSeriesRenderer(r);
}
return renderer;
}
private void setChartSettings(XYMultipleSeriesRenderer renderer,
String title, String xTitle, String yTitle, double yMin,
double yMax, double xMin, double xMax, int axesColor, List<double[]> x) {
renderer.setChartTitle(title);
renderer.setChartTitleTextSize(24);
renderer.setXTitle(xTitle);
renderer.setYTitle(yTitle);
renderer.setXAxisMin(xMin);
renderer.setXAxisMax(xMax);
renderer.setYAxisMin(yMin);
renderer.setYAxisMax(yMax);
renderer.setYLabels(18);
renderer.setXLabelsColor(axesColor);
renderer.setLabelsColor(Color.BLACK);
renderer.setShowGrid(true);
renderer.setClickEnabled(false);
renderer.setShowCustomTextGrid(true);
renderer.setShowGridY(true);
}
}
不應該是'public class DrawMonthLineChart extends Context'或類似的東西嗎?這就是錯誤信息所示。 – jlordo
嗨jlordo:我擴展上下文,然後錯誤信息是[這裏](http://134.208.3.130/~dickfala/android/errMsg.html) – dickfala
那麼,這是一個'NullPointerException '看看它出現的那一行,並在那一行中確定'null'。 – jlordo