2013-11-15 3 views
0

Я пытаюсь создать круговую диаграмму, получая данные из моей базы данных sqlite. Я хочу, чтобы круговая диаграмма показывала имя друга и друзей. Круговая диаграмма должна делиться на основе расходов друзей. Что я здесь делаю неправильно? Пожалуйста, направляйте меня. Благодарю.Android - NullPointerException при создании круговой диаграммы

Вот мой пирог код график:

public class PieChart { 
public Intent getIntent(Context context,String eventId){ 
    EventController controller = new EventController(context); 
    // this is my data of performance; data is collected in array. 
    HashMap<String, String> queryValues = new HashMap<String, String>(); 
    queryValues.put("eventId", eventId); 
    ArrayList <HashMap<String,String>> getData = controller.getAllFriends(queryValues); 
    CategorySeries series = new CategorySeries("pie"); // adding series to charts. 
    int colorcode = -13959039; 
    ArrayList<String> coloring = new ArrayList<String>(); 
    for (int a=0; a<getData.size();a++){ 
     String friendName = null; 
     double friendSpend = 0; 
     HashMap<String, String> ValexpenseId = getData.get(a); 
     for (Entry<String, String> entry : ValexpenseId.entrySet()) { 
      String key = entry.getKey(); 
      if (key.equals("friendName")){ 
       String value = entry.getValue(); 
       friendName = value; 
      } 
      else if (key.equals("friendSpending")){ 
       String value = entry.getValue(); 
       double friendSpending = Double.parseDouble(value); 
       friendSpend = friendSpending; 
      } 
      series.add(friendName,friendSpend);    
      coloring.add(String.valueOf(colorcode)); 
      colorcode = colorcode + 1000000; 
     } 
    }    
// set style for series 
     DefaultRenderer renderer = new DefaultRenderer(); 
     for(String color : coloring){ 
      SimpleSeriesRenderer r = new SimpleSeriesRenderer(); 
      int colour = Integer.parseInt(color); 
      r.setColor(colour); 
      r.setDisplayBoundingPoints(true); 
      r.setDisplayChartValuesDistance(5); 
      r.setDisplayChartValues(true); 
      r.setChartValuesTextSize(15); 
      renderer.addSeriesRenderer(r); 
     } 
     renderer.isInScroll(); 
     renderer.setZoomButtonsVisible(true); //set zoom button in Graph 
     renderer.setApplyBackgroundColor(true); 
     renderer.setBackgroundColor(Color.BLACK); //set background color 
     renderer.setChartTitle("Efforts"); 
     renderer.setChartTitleTextSize((float) 30); 
     renderer.setShowLabels(true); 
     renderer.setLabelsTextSize(20); 
     renderer.setLegendTextSize(25); 
     renderer.setDisplayValues(true); 
     return ChartFactory.getPieChartIntent(context, series, renderer, "PieChart"); 
    } 

Вход Cat:

11-15 15:03:33.985: E/AndroidRuntime(24170): FATAL EXCEPTION: main 11-15 15:03:33.985: E/AndroidRuntime(24170): java.lang.NullPointerException 11-15 15:03:33.985: E/AndroidRuntime(24170): at org.achartengine.chart.AbstractChart.getFitText(AbstractChart.java:405) 11-15 15:03:33.985: E/AndroidRuntime(24170): at org.achartengine.chart.AbstractChart.drawLabel(AbstractChart.java:483) 11-15 15:03:33.985: E/AndroidRuntime(24170): at org.achartengine.chart.PieChart.draw(PieChart.java:134) 11-15 15:03:33.985: E/AndroidRuntime(24170): at org.achartengine.GraphicalView.onDraw(GraphicalView.java:168) 11-15 15:03:33.985: E/AndroidRuntime(24170): at android.view.View.draw(View.java:13877) 11-15 15:03:33.985: E/AndroidRuntime(24170): at android.view.View.getDisplayList(View.java:12811) 11-15 15:03:33.985: E/AndroidRuntime(24170): at android.view.View.getDisplayList(View.java:12859) 11-15 15:03:33.985: E/AndroidRuntime(24170): at android.view.View.draw(View.java:13593) 11-15 15:03:33.985: E/AndroidRuntime(24170): at android.view.ViewGroup.drawChild(ViewGroup.java:2954) 11-15 15:03:33.985: E/AndroidRuntime(24170): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2815) 11-15 15:03:33.985: E/AndroidRuntime(24170): at android.view.View.draw(View.java:13880) 11-15 15:03:33.985: E/AndroidRuntime(24170): at android.widget.FrameLayout.draw(FrameLayout.java:467) 11-15 15:03:33.985: E/AndroidRuntime(24170): at android.view.View.getDisplayList(View.java:12811)

+0

На какой строке это дает исключение NullPointerException? –

+0

@HardikTrivedi привет обновил мой код с log cat =) – AndroidWorld12

ответ

0

код настолько complected. Я бы предложил вам разделить методы.

1) Подготовка данных

private CategorySeries getDatSet(WorkExp exp) { 
     CategorySeries mSeries = new CategorySeries(""); 
     int[] weightArr = exp.getWeight(); 
     String[] taskArr = exp.getTask(); 
     for (int taskCount = 0; taskCount < taskArr.length; taskCount++) { 
      int weight = weightArr[taskCount]; 
      String task = taskArr[taskCount]; 
      mSeries.add(task, weight); 
     } 
     return mSeries; 
    } 

2) Создание рендерер

private DefaultRenderer getRenderer(WorkExp exp) { 
     String[] colorArr = exp.getColor(); 
     DefaultRenderer defaultRenderer = new DefaultRenderer(); 
     for (int taskCount = 0; taskCount < colorArr.length; taskCount++) { 
      String color = colorArr[taskCount]; 
      SimpleSeriesRenderer simpleRenderer = new SimpleSeriesRenderer(); 
      simpleRenderer.setColor(Color.parseColor(color)); 
      defaultRenderer.addSeriesRenderer(simpleRenderer); 
     } 
     defaultRenderer.setShowLabels(true); 
     defaultRenderer.setShowLegend(true); 
     return defaultRenderer; 
    } 

3) А затем генерировать диаграммы

private GraphicalView generateChart(CategorySeries dataset, 
      DefaultRenderer renderer) { 
     return ChartFactory.getPieChartView(context, dataset, renderer); 
    } 

4) Наконец называют

WorkExp exp = expList.get(position); 
      chartContainer.addView(generateChart(getDatSet(exp), 
        getRenderer(exp))); 

Я получил круговую диаграмму два дня назад, используя тот же код.

Сообщите мне, если вы не понимаете ни одной строки. Я помогу тебе.

Смежные вопросы