java.lang.NullPointerException
  at android.graphics.Canvas.throwIfRecycled(Canvas.java:954)
  at android.graphics.Canvas.drawBitmap(Canvas.java:980)
  at org.achartengine.GraphicalView.onDraw(GraphicalView.java:174)
  at android.view.View.draw(View.java:6880)
  at android.view.ViewGroup.drawChild(ViewGroup.java:1646)
  at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
  at android.view.View.draw(View.java:6883)
  at android.view.ViewGroup.drawChild(ViewGroup.java:1646)
  at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
  at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
  at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
  at android.view.View.draw(View.java:6883)
  at android.widget.FrameLayout.draw(FrameLayout.java:357)
  at android.view.ViewGroup.drawChild(ViewGroup.java:1646)
  at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
  at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
  at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
  at android.view.View.draw(View.java:6883)
  at android.view.ViewGroup.drawChild(ViewGroup.java:1646)
  at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
  at android.view.View.draw(View.java:6883)
  at android.view.ViewGroup.drawChild(ViewGroup.java:1646)
  at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
  at android.view.View.draw(View.java:6883)
  at android.widget.FrameLayout.draw(FrameLayout.java:357)
  at android.view.ViewGroup.drawChild(ViewGroup.java:1646)
  at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
  at android.view.View.draw(View.java:6883)
  at android.widget.FrameLayout.draw(FrameLayout.java:357)
  at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:1862)
  at android.view.ViewRoot.draw(ViewRoot.java:1522)
  at android.view.ViewRoot.performTraversals(ViewRoot.java:1258)
  at android.view.ViewRoot.handleMessage(ViewRoot.java:1859)
  at android.os.Handler.dispatchMessage(Handler.java:99)
  at android.os.Looper.loop(Looper.java:123)
  at android.app.ActivityThread.main(ActivityThread.java:3683)
  at java.lang.reflect.Method.invokeNative(Native Method)
  at java.lang.reflect.Method.invoke(Method.java:507)
  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
  at dalvik.system.NativeStart.main(Native Method)

解决方案 »

  1.   

    这不就是出错位置吗?第174行
    at org.achartengine.GraphicalView.onDraw(GraphicalView.java:174)
     
      

  2.   


    GraphicalView.java是系统类  不是我写的
      

  3.   

    代码是这样的:
    package com.zhx.app.finance.ui;import java.util.HashMap;
    import java.util.Map;import org.achartengine.ChartFactory;
    import org.achartengine.GraphicalView;
    import org.achartengine.model.CategorySeries;
    import org.achartengine.renderer.DefaultRenderer;
    import org.achartengine.renderer.SimpleSeriesRenderer;import android.app.Activity;
    import android.graphics.Color;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup.LayoutParams;
    import android.view.Window;
    import android.widget.CompoundButton;
    import android.widget.CompoundButton.OnCheckedChangeListener;
    import android.widget.LinearLayout;
    import android.widget.ToggleButton;import com.zhx.app.finance.R;
    import com.zhx.app.finance.control.DataAnalyseControl;public class DetailActivity extends Activity { private static final String TAG = "DetailActivity";
    private ToggleButton toggle;
    private LinearLayout chartView;
    private static int[] COLORS = new int[] { Color.GREEN, Color.BLUE, Color.MAGENTA, Color.CYAN };
    private CategorySeries mSeries = new CategorySeries("");
    private DefaultRenderer mRenderer = new DefaultRenderer();
    private GraphicalView graphicView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.data_detail_layout);
    initComponet();
    // initIncomeView();
    } private void initComponet() {

        mRenderer.setApplyBackgroundColor(true);
        mRenderer.setBackgroundColor(Color.argb(100, 50, 50, 50));
        mRenderer.setChartTitleTextSize(20);
        mRenderer.setLabelsTextSize(15);
        mRenderer.setLegendTextSize(15);
        mRenderer.setMargins(new int[] { 20, 30, 15, 0 });
        mRenderer.setZoomButtonsVisible(true);
        mRenderer.setStartAngle(90);
        
    toggle = (ToggleButton) findViewById(R.id.detail_chart_switch);
    chartView = (LinearLayout) findViewById(R.id.detail_chart_show);
    toggle.setOnCheckedChangeListener(new OnCheckedChangeListener() { public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
    if (!isChecked) { // 为textOn时
    initIncomeView();
    } else { // 为textOff时
    initExpensesView();
    }
    }
    });

    } private void initIncomeView() {
    Map<String, Float> money = new HashMap<String, Float>();
    Map<Integer, String> type = new HashMap<Integer, String>(); money = DataAnalyseControl.getCurrentMonthIncome(DetailActivity.this);
    type = DataAnalyseControl.getAllIncomeType(DetailActivity.this); if (money != null && type != null) {
    chartView.removeAllViews();
    if (graphicView == null) {
    graphicView = paintPieChart(money, type);
    graphicView.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,//
    LayoutParams.MATCH_PARENT));
    chartView.addView(graphicView);
    } else {
    graphicView.repaint();
    } } else {
    chartView.removeAllViews();
    View view = LayoutInflater.from(this)//
    .inflate(R.layout.data_empty, //
    null, false);
    view.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,//
    LayoutParams.MATCH_PARENT));
    chartView.addView(view);
    }
    } private void initExpensesView() {
    Map<String, Float> money = new HashMap<String, Float>();
    Map<Integer, String> type = new HashMap<Integer, String>(); money = DataAnalyseControl.getCurrentMonthExpenses(DetailActivity.this);
    type = DataAnalyseControl.getAllExpensesType(DetailActivity.this); if (money != null && type != null) {
    chartView.removeAllViews();
    Log.d(TAG, "initExpensesView --> " + 1);
    if (graphicView == null) {
    Log.d(TAG, "initExpensesView --> " + 2);
    graphicView = paintPieChart(money, type);
    graphicView.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,//
    LayoutParams.MATCH_PARENT));
    chartView.addView(graphicView);
    Log.d(TAG, "initExpensesView --> " + 3);
    } else {
    graphicView.repaint();
    }
    } else {
    chartView.removeAllViews();
    // TODO 数据为空时处理
    View view = LayoutInflater.from(this)//
    .inflate(R.layout.data_empty, //
    null, false);
    view.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,//
    LayoutParams.MATCH_PARENT));
    chartView.addView(view);
    } } /**
     * @author zhx 2012-5-8 下午5:25:53
     * 
     * @param money
     * @param type
     * 
     * @return void
     * 
     *         Description: 画饼状图
     */
    private GraphicalView paintPieChart(Map<String, Float> money,//
    Map<Integer, String> type) { if (money.size() > 0) {
    for (int i = 0; i < type.size(); i++) {
    if (money.containsKey(type.get(i))) {
    mSeries.add(type.get(i), money.get(type.get(i)));
    SimpleSeriesRenderer renderer = new SimpleSeriesRenderer();
    renderer.setColor(COLORS[(mSeries.getItemCount() - 1) % COLORS.length]);
    mRenderer.addSeriesRenderer(renderer);
    }
    }
    }
    // graphicView = ChartFactory.getPieChartView(this, mSeries, mRenderer);
    // mRenderer.setClickEnabled(true);
    // mRenderer.setSelectableBuffer(10);
    // graphicView.setOnClickListener(new View.OnClickListener() {
    //
    // public void onClick(View arg0) {
    // SeriesSelection seriesSelection = graphicView.getCurrentSeriesAndPoint();
    // if (seriesSelection != null) {
    // ToastUtil.makeText(DetailActivity.this, //
    // getString(R.string.data_analyse_select) //
    // + seriesSelection.getValue());
    // }
    // }
    // });
    return ChartFactory.getPieChartView(this, mSeries, mRenderer);
    } @Override
    protected void onResume() {
    super.onResume(); }}graphicView可以显示出来,是个饼状图。但显示出来1~2秒后就报异常了
      

  4.   

    你通过LinearLayout chartView; 只定义了chartView这个对象类型,但是未看到有实始对像的代码,也就是说chartView是null,你要在onCreate里面再增加一个代码:
    chartView = new LinearLayout(getApplicationContext());
      

  5.   

    chartView已定义,你可能没看见
    chartView = (LinearLayout) findViewById(R.id.detail_chart_show);
      

  6.   

    问题已解决,是第三方插件的问题,achartengine的setZoomButtonsVisible(true)方法有问题,取消就可以了,谢谢大家了
      

  7.   

    问题已解决,是第三方插件的问题,achartengine的setZoomButtonsVisible(true)方法有问题,取消就可以了,谢谢大家了  Thanks