2013-06-06 18 views
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); 

     } 
    } 
+0

不應該是'public class DrawMonthLineChart extends Context'或類似的東西嗎?這就是錯誤信息所示。 – jlordo

+0

嗨jlordo:我擴展上下文,然後錯誤信息是[這裏](http://134.208.3.130/~dickfala/android/errMsg.html) – dickfala

+0

那麼,這是一個'NullPointerException '看看它出現的那一行,並在那一行中確定'null'。 – jlordo

回答

1

錯誤消息說,這一切:

Method needs:   (Context, XYMultipleSeriesDataset, XYMultipleSeriesRenderer, float) 

Method gets:(DrawMonthLineChart, XYMultipleSeriesDataset, XYMultipleSeriesRenderer, float) 

DrawMonthLineChart班級有Object作爲父母,但必須有Context作爲祖先。

爲此,你需要像

public class DrawMonthLineChart extends Context { 

public class DrawMonthLineChart extends Activity { 

或適當的東西。請參閱docs