问题描述
我想用折线图在我的应用程序,我想,我使用achart引擎来显示它在其中设置为背景图片为线性布局1,在第2线性布局我想补充线图下方的图片库。空指针异常在66行(layout.addView(mChartView,新的LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT));),请帮助
包com.android.linegraph;
进口的java.util.ArrayList;
进口的java.util.List;
进口org.achartengine.ChartFactory;
进口org.achartengine.GraphicalView;
进口org.achartengine.chart.PointStyle;
进口org.achartengine.model.XYMultipleSeriesDataset;
进口org.achartengine.model.XYSeries;
进口org.achartengine.renderer.XYMultipleSeriesRenderer;
进口org.achartengine.renderer.XYSeriesRenderer;
进口android.app.Activity;
进口android.graphics.Color;
进口android.graphics.Paint.Align;
进口android.os.Bundle;
进口android.util.Log;
进口android.view.ViewGroup.LayoutParams;
进口android.widget.LinearLayout;
公共类LineGraph延伸活动{
私人GraphicalView mChartView;
XYMultipleSeriesRenderer渲染器;
@覆盖
保护无效的onCreate(包savedInstanceState){
// TODO自动生成方法存根
super.onCreate(savedInstanceState);
的LinearLayout布局=(的LinearLayout)findViewById(R.id.linearLayout2);
的String []标题=新的String [] {spens1};
名单<加倍[]> X =新的ArrayList<加倍[]>();
x.add(新双[] {1,2,3,4,5,6,7,8,9,10,11,12});
//}
名单<加倍[]>值=新的ArrayList<加倍[]>();
值
。新增(新的双[] {9,10,11,15,19,23,26,25,22,18,13,
10});
INT []颜色=新INT [] {Color.BLUE};
PointStyle []风格=新PointStyle [] {PointStyle.CIRCLE};
渲染= buildRenderer(颜色,款式);
INT长度= renderer.getSeriesRendererCount();
的for(int i = 0; I<长度;我++){
((XYSeriesRenderer)renderer.getSeriesRendererAt(I))
.setFillPoints(真正的);
}
setChartSettings(渲染器,记分卡VIEW,Attetempts
马克斯拿下,0.5%,12.5,-10,40,Color.LTGRAY,Color.LTGRAY);
renderer.setXLabels(12);
renderer.setYLabels(10);
renderer.setShowGrid(真正的);
renderer.setXLabelsAlign(Align.RIGHT);
renderer.setYLabelsAlign(Align.RIGHT);
renderer.setZoomButtonsVisible(真正的);
renderer.setPanLimits(新的双[] {-10,20,-10,40});
renderer.setZoomLimits(新的双[] {-10,20,-10,40});
如果(mChartView == NULL){
Log.d(OnCreate中,如果(mChartView == NULL));
mChartView = ChartFactory.getLineChartView(这一点,mDataset(标题,
X,值),渲染器);
layout.addView(mChartView,新的LayoutParams(
LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT));
} 其他 {
// mChartView.repaint();
Log.d(OnCreate中,如果(mChartView = NULL)!);
}
}
私人无效setChartSettings(XYMultipleSeriesRenderer renderer3,
标题字符串,字符串xTitle,字符串yTitle,双XMIN,
双XMAX,双YMIN,双YMAX,INT axesColor,
INT labelsColor){
// TODO自动生成方法存根
renderer3.setChartTitle(职称);
renderer3.setXTitle(xTitle);
renderer3.setYTitle(yTitle);
renderer3.setXAxisMin(XMIN);
renderer3.setXAxisMax(XMAX);
renderer3.setYAxisMin(YMIN);
renderer3.setYAxisMax(YMAX);
renderer3.setAxesColor(axesColor);
renderer3.setLabelsColor(labelsColor);
}
私人XYMultipleSeriesRenderer buildRenderer(INT []的颜色,
PointStyle []样式){
// TODO自动生成方法存根
XYMultipleSeriesRenderer渲染器=新XYMultipleSeriesRenderer();
setRenderer(渲染,颜色,款式);
返回渲染器;
}
私人无效setRenderer(XYMultipleSeriesRenderer renderer2,INT []的颜色,
PointStyle []样式){
// TODO自动生成方法存根
renderer2.setAxisTitleTextSize(16);
renderer2.setChartTitleTextSize(20);
renderer2.setLabelsTextSize(15);
renderer2.setLegendTextSize(15);
renderer2.setPointSize(5F);
renderer2.setMargins(新INT [] {20,30,15,20});
INT长度= colors.length;
的for(int i = 0; I<长度;我++){
XYSeriesRenderer R =新XYSeriesRenderer();
r.setColor(颜色[I]);
r.setPointStyle(样式[I]);
renderer2.addSeriesRenderer(r)的;
}
}
私人XYMultipleSeriesDataset mDataset(字符串[]冠军,
名单<加倍[]> xValues,列表和LT;加倍[]> yValues){
// TODO自动生成方法存根
XYMultipleSeriesDataset为dataSet1 =新XYMultipleSeriesDataset();
addXYSeries(为dataSet1,职称,xValues,yValues,0);
返回为dataSet1;
}
私人无效addXYSeries(XYMultipleSeriesDataset数据集的String []冠军,
名单<加倍[]> xValues,列表和LT;加倍[]> yValues,int标){
// TODO自动生成方法存根
INT长度= titles.length;
的for(int i = 0; I<长度;我++){
XYSeries系列=新XYSeries(标题[我],规模);
双[] XV = xValues.get(我);
双[] YV = yValues.get(我);
INT seriesLength = xV.length;
对于(INT K = 0; K< seriesLength; k ++){
series.add(XV [K],YV [K]);
}
dataset.addSeries(系列);
}
}
}
< RelativeLayout的机器人:ID =@ + ID / relativeLayout1
机器人:layout_width =FILL_PARENT机器人:layout_height =FILL_PARENT
的xmlns:机器人=http://schemas.android.com/apk/res/android>
<的LinearLayout机器人:ID =@ + ID / linearLayout1
机器人:背景=@可绘制/蟋蟀机器人:layout_alignParentLeft =真
机器人:layout_height =WRAP_CONTENT机器人:layout_width =WRAP_CONTENT>< / LinearLayout中>
<的LinearLayout机器人:ID =@ + ID / linearLayout2
机器人:layout_below =@ ID / linearLayout1
机器人:layout_alignParentLeft =真正的机器人:layout_height =WRAP_CONTENT
机器人:layout_width =WRAP_CONTENT>< / LinearLayout中>
< / RelativeLayout的>
我不能在实践中目前测试这一点,但我认为你缺少一个呼叫
的setContentView(R.layout.NAME_OF_YOUR_XML_FILE);
这可能例如是该行之后:
super.onCreate(savedInstanceState);
如果没有这个的布局
变量为null,从而导致异常(我的猜测)。
I want to use line chart in my application, I want to show it in below the image which is setting as background image for linear layout 1, in 2nd linear layout i want to add line chart, I'm using achart engine libraries. Null pointer exception at line 66(layout.addView(mChartView, new LayoutParams( LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));) please help
package com.android.linegraph;
import java.util.ArrayList;
import java.util.List;
import org.achartengine.ChartFactory;
import org.achartengine.GraphicalView;
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.app.Activity;
import android.graphics.Color;
import android.graphics.Paint.Align;
import android.os.Bundle;
import android.util.Log;
import android.view.ViewGroup.LayoutParams;
import android.widget.LinearLayout;
public class LineGraph extends Activity {
private GraphicalView mChartView;
XYMultipleSeriesRenderer renderer;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
LinearLayout layout = (LinearLayout) findViewById(R.id.linearLayout2);
String[] titles = new String[] { "spens1" };
List<double[]> x = new ArrayList<double[]>();
x.add(new double[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 });
// }
List<double[]> values = new ArrayList<double[]>();
values
.add(new double[] { 9, 10, 11, 15, 19, 23, 26, 25, 22, 18, 13,
10 });
int[] colors = new int[] { Color.BLUE };
PointStyle[] styles = new PointStyle[] { PointStyle.CIRCLE };
renderer = buildRenderer(colors, styles);
int length = renderer.getSeriesRendererCount();
for (int i = 0; i < length; i++) {
((XYSeriesRenderer) renderer.getSeriesRendererAt(i))
.setFillPoints(true);
}
setChartSettings(renderer, "SCORE CARD VIEW", "Attetempts",
"Marks Scored", 0.5, 12.5, -10, 40, Color.LTGRAY, Color.LTGRAY);
renderer.setXLabels(12);
renderer.setYLabels(10);
renderer.setShowGrid(true);
renderer.setXLabelsAlign(Align.RIGHT);
renderer.setYLabelsAlign(Align.RIGHT);
renderer.setZoomButtonsVisible(true);
renderer.setPanLimits(new double[] { -10, 20, -10, 40 });
renderer.setZoomLimits(new double[] { -10, 20, -10, 40 });
if (mChartView == null) {
Log.d("Oncreate ", "if (mChartView == null)");
mChartView = ChartFactory.getLineChartView(this, mDataset(titles,
x, values), renderer);
layout.addView(mChartView, new LayoutParams(
LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
} else {
// mChartView.repaint();
Log.d("Oncreate ", "if (mChartView != null)");
}
}
private void setChartSettings(XYMultipleSeriesRenderer renderer3,
String title, String xTitle, String yTitle, double xMin,
double xMax, double yMin, double yMax, int axesColor,
int labelsColor) {
// TODO Auto-generated method stub
renderer3.setChartTitle(title);
renderer3.setXTitle(xTitle);
renderer3.setYTitle(yTitle);
renderer3.setXAxisMin(xMin);
renderer3.setXAxisMax(xMax);
renderer3.setYAxisMin(yMin);
renderer3.setYAxisMax(yMax);
renderer3.setAxesColor(axesColor);
renderer3.setLabelsColor(labelsColor);
}
private XYMultipleSeriesRenderer buildRenderer(int[] colors,
PointStyle[] styles) {
// TODO Auto-generated method stub
XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer();
setRenderer(renderer, colors, styles);
return renderer;
}
private void setRenderer(XYMultipleSeriesRenderer renderer2, int[] colors,
PointStyle[] styles) {
// TODO Auto-generated method stub
renderer2.setAxisTitleTextSize(16);
renderer2.setChartTitleTextSize(20);
renderer2.setLabelsTextSize(15);
renderer2.setLegendTextSize(15);
renderer2.setPointSize(5f);
renderer2.setMargins(new int[] { 20, 30, 15, 20 });
int length = colors.length;
for (int i = 0; i < length; i++) {
XYSeriesRenderer r = new XYSeriesRenderer();
r.setColor(colors[i]);
r.setPointStyle(styles[i]);
renderer2.addSeriesRenderer(r);
}
}
private XYMultipleSeriesDataset mDataset(String[] titles,
List<double[]> xValues, List<double[]> yValues) {
// TODO Auto-generated method stub
XYMultipleSeriesDataset dataset1 = new XYMultipleSeriesDataset();
addXYSeries(dataset1, titles, xValues, yValues, 0);
return dataset1;
}
private void addXYSeries(XYMultipleSeriesDataset dataset, String[] titles,
List<double[]> xValues, List<double[]> yValues, int scale) {
// TODO Auto-generated method stub
int length = titles.length;
for (int i = 0; i < length; i++) {
XYSeries series = new XYSeries(titles[i], scale);
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);
}
}
}
<RelativeLayout android:id="@+id/relativeLayout1"
android:layout_width="fill_parent" android:layout_height="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android">
<LinearLayout android:id="@+id/linearLayout1"
android:background="@drawable/cricket" android:layout_alignParentLeft="true"
android:layout_height="wrap_content" android:layout_width="wrap_content"></LinearLayout>
<LinearLayout android:id="@+id/linearLayout2"
android:layout_below="@id/linearLayout1"
android:layout_alignParentLeft="true" android:layout_height="wrap_content"
android:layout_width="wrap_content"></LinearLayout>
</RelativeLayout>
I can't test this in practice now, but I think you are missing a call to
setContentView(R.layout.NAME_OF_YOUR_XML_FILE);
this could e.g. be after this line:
super.onCreate(savedInstanceState);
Without this the layout
variable is null, thus causing the exception (my guess).
这篇关于使用aChartengine折线图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!