我已经学习了如何从固定数据创建MPAndroidChart条形图,但是需要从数据库中创建一个。我在这里和文档中都没有任何帮助。我要查询交易表中的收入按收入类别的总和,而不是barEntries数组列表。这是查询:
SELECT SUM(income),income_category FROM transactions GROUP BY income_category;
下面是固定数据的代码:
public class CYIncomeChartActivity extends AppCompatActivity {
SQLiteDatabase mSQLiteDatabase;
BudgetDbHelper mDBHelper;
SQLiteDatabase mSQLiteDatabase;
// Database helper object //
private BudgetDbHelper mDbHelper;
BarChart barChart;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_cy_income_chart);
barChart = (BarChart) findViewById(R.id.cy_income_chart);
barChart.setDrawBarShadow(false);
barChart.setDrawValueAboveBar(true);
barChart.setMaxVisibleValueCount(50);
barChart.setPinchZoom(false);
barChart.setDrawGridBackground(true);
ArrayList<BarEntry> barEntries = new ArrayList<>();
barEntries.add(new BarEntry(1, 40f));
barEntries.add(new BarEntry(2, 44f));
barEntries.add(new BarEntry(3, 30f));
barEntries.add(new BarEntry(4, 36f));
BarDataSet barDataSet = new BarDataSet(barEntries, "Data Set1");
barDataSet.setColors(ColorTemplate.COLORFUL_COLORS);
BarData data = new BarData(barDataSet);
data.setBarWidth(0.9f);
barChart.setData(data);
String[] months = new String[] {"Jan", "Feb", "Mar", "Apr", "May","Jun"};
XAxis xAxis = barChart.getXAxis();
xAxis.setValueFormatter(new MyXAxisValueFormatter(months));
xAxis.setPosition(XAxis.XAxisPosition.BOTH_SIDED);
}
public class MyXAxisValueFormatter implements IAxisValueFormatter {
private String[] mValues;
public MyXAxisValueFormatter(String[] values) {
this.mValues = values;
}
@Override
public String getFormattedValue(float value, AxisBase axis) {
return mValues[(int)value];
}
}
}
请帮助。谢谢!
答案 0 :(得分:0)
您可以执行以下操作:-
1)在 BudgetDbHelper 类中创建一个方法,以按以下方式返回 Arraylist :-
public ArrayList<BarEntry> getBarEntries() {
String income_sum_column = "income_sum";
SQliteDatabase db = this.getWriteableDatabase();
String[] columns = new String[]{"SUM(income) AS " + income_sum_column,"income_category"};
Cursor csr = db.query("transactions",columns,null,null,"income_category",null,null);
ArrayList<BarEntry> rv = new ArrayList<>();
while(csr.moveToNext()) {
rv.add(new BarEntry(
csr.getInt(csr.getColumnindex("income_category")),
csr.getFloat(csr.getColumnIndex(income_sum_column))
)
}
csr.close();
return rv;
}
2)在CYIncomeChartActivity
中实例化mDbHelper
,例如:-
setContentView(R.layout.activity_cy_income_chart); //<<<< as is
mDbHelper = new BudgetDbHelper(this); //<<<< assumes signature is just context
3)例如,通过调用方法getBarEntries
,从db的适当位置检索ArrayList。
ArrayList<BarEntry> barEntries = mDbHelper.getBarEntries();
4)使用返回的ArrayList代替硬编码的ArrayList。