2016-05-01 9 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 
} 

} 

for (int i = 0; i < queryYData().size(); i++) Aboce私が試みコードが、エラーがある、主に

chart.queryYData(chart.java:100)Cursor cursor=SQ.rawQuery(query,null); chart.addData(chart.java:111) chart.onCreate(chart.java:76)addData();

これらのエラーにより、「残念ながら、アプリケーションは停止しました」。誰かがこれで私を助けることができますか?ありがとうございました。

+0

[不幸にもMyAppが停止しました。どうすればこの問題を解決できますか?](http://stackoverflow.com/questions/23353173/unfortunately-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);レポートは自分のアクティビティのクラスで、DatabaseHelperはデータベース、テーブル、yData、xDataを作成したクラスです –