从 SQLite 数据库填充 MPAndroidChart BarChart
Populate MPAndroidChart BarChart from SQLite database
我已经学会了如何从固定数据创建 MPAndroidChart 条形图,但需要从数据库创建一个。我在没有任何帮助的情况下查看了这里和文档。我想查询交易 table 以获取按收入类别划分的收入总和,而不是 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];
}
}
}
请帮忙。谢谢!
您可以执行以下操作:-
1) 在 BudgetDbHelper class 到 return 一个 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) 在 the/an 适当的位置,通过调用 getBarEntries
方法从数据库中检索 ArrayList,例如
ArrayList<BarEntry> barEntries = mDbHelper.getBarEntries();
4) 使用 returned ArrayList 而不是硬编码的 ArrayList。
- 注意以上代码为原理代码,未经测试,可能存在错误。
我已经学会了如何从固定数据创建 MPAndroidChart 条形图,但需要从数据库创建一个。我在没有任何帮助的情况下查看了这里和文档。我想查询交易 table 以获取按收入类别划分的收入总和,而不是 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];
}
}
}
请帮忙。谢谢!
您可以执行以下操作:-
1) 在 BudgetDbHelper class 到 return 一个 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) 在 the/an 适当的位置,通过调用 getBarEntries
方法从数据库中检索 ArrayList,例如
ArrayList<BarEntry> barEntries = mDbHelper.getBarEntries();
4) 使用 returned ArrayList 而不是硬编码的 ArrayList。
- 注意以上代码为原理代码,未经测试,可能存在错误。