2016-05-01 96 views
0

我想使用來自sqlite的數據顯示餅圖。我將數據輸出到列表中以獲取餅圖的條目。但是代碼似乎有些問題,我不知道它有什麼問題。下面是代碼。MPAndroid不顯示餅圖

public class chart extends Activity { 

SQLiteDatabase SQ; 

@Override 
protected void onCreate (Bundle savedInstanceState){ 
… 
    //add data 
    addData(); 

    //customize legends 
    Legend l=mChart.getLegend(); 
    l.setPosition(Legend.LegendPosition.RIGHT_OF_CHART); 
    l.setXEntrySpace(7); 
    l.setYEntrySpace(5); 

} 

public ArrayList<String> queryXData(){ 
    ArrayList<String> xNewData = new ArrayList<String>(); 
    String query="SELECT "+ TableInfo.APPLIANCE +" FROM "+TableInfo.TABLE_NAME; 
    Cursor cursor = SQ.rawQuery(query,null); 
    for(cursor.moveToFirst();!cursor.isAfterLast();cursor.moveToNext()){ 
     xNewData.add(cursor.getString(0)); 
    } 
    cursor.close(); 
    return xNewData; 
} 

public ArrayList<Integer> queryYData(){ 
    ArrayList<Integer> yNewData= new ArrayList<Integer>(); 
    String query="SELECT "+ TableInfo.POWER_USED +" FROM "+TableInfo.TABLE_NAME; 
    Cursor cursor=SQ.rawQuery(query,null); 
    for(cursor.moveToFirst();!cursor.isAfterLast();cursor.moveToNext()){ 
     yNewData.add(cursor.getInt(5)); 
    } 
    cursor.close(); 
    return yNewData; 
} 

private void addData() { 
    ArrayList<Entry> yVals = new ArrayList<Entry>(); 

    for (int i = 0; i < queryYData().size(); i++) 
     yVals.add(new Entry(queryYData().get(i), i)); 

    ArrayList<String> xVals = new ArrayList<String>(); 

    for (int i = 0; i < queryXData().size(); i++) 
     xVals.add(queryXData().get(i)); 

    //create pie data set 
    PieDataSet dataSet=new PieDataSet(yVals,"Appliances"); 
    dataSet.setSliceSpace(3); // space between each arc slice 
    dataSet.setSelectionShift(5); 

    //add many colors 
    ArrayList<Integer> colors=new ArrayList<Integer>(); 

    for(int c: ColorTemplate.VORDIPLOM_COLORS) 
     colors.add(c); 
    for(int c: ColorTemplate.JOYFUL_COLORS) 
     colors.add(c); 
    for(int c: ColorTemplate.COLORFUL_COLORS) 
     colors.add(c); 
    for(int c: ColorTemplate.LIBERTY_COLORS) 
     colors.add(c); 
    for(int c: ColorTemplate.PASTEL_COLORS) 
     colors.add(c); 
    colors.add(ColorTemplate.getHoloBlue()); 
    dataSet.setColors(colors); 

    //instantiate pie data object now 
    PieData data=new PieData(xVals, dataSet); 
    data.setValueFormatter(new PercentFormatter()); 
    data.setValueTextSize(11f); 
    data.setValueTextColor(Color.GRAY); 

    mChart.setData(data); 

    //undo all highlights 
    mChart.highlightValues(null); 

    //update pie chart 
    mChart.invalidate(); 

    //demo start 
} 

} 

Aboce是我試過的代碼,但有錯誤,主要是

chart.queryYData(chart.java:100)Cursor cursor=SQ.rawQuery(query,null); chart.addData(chart.java:111)for (int i = 0; i < queryYData().size(); i++) chart.onCreate(chart.java:76)addData();

這些錯誤使得應用程序「Unfortunaely,應用程序已停止。」。有人可以幫我弄這個嗎?謝謝。

+0

可能的重複[不幸MyApp已停止。如何解決這個問題?](http://stackoverflow.com/questions/23353173/uncomfort-myapp-has-stopped-how-can-i-solve-this) –

回答

0

您需要添加一行來標識mChart。其他代碼看起來不錯。

mChart=(PieChart)findViewByID(R.id.pieChart); 
+0

不知道你如何設置你的SQLite數據庫。我也有這一行來打開SQLite數據庫幫助程序: –

+0

DatabaseHelper databaseHelper = new DatabaseHelper(report.this); report是我的活動的類,DatabaseHelper是創建我的數據庫,表,yData和xData的類 –