使用 SQLite 数据库填充 MPAndroidChart 条形图
Populate MPAndroidChart Bar chart with SQLite database
我有一个 MPAndroidChart,我想用它来显示 SQL 查询的结果,给出我的收入列的总和并按 income_category 对其进行分组。这里的另一个用户让我更接近于让它工作,但是我在执行 BarChart.setData 时收到空对象引用错误。调试显示查询有效,所以我不知道为什么它为空。下面是 BudgetDbHelper 中的代码:
public ArrayList<BarEntry> getBarEntries() {
String income_sum_column = "income_sum";
SQLiteDatabase db = this.getReadableDatabase();
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;
这里是 CYIncomeChartActivity 的代码:
public class CYIncomeChartActivity extends AppCompatActivity {
SQLiteDatabase sqLiteDatabase;
// Database helper object //
private BudgetDbHelper mDbHelper;
BarChart barChart;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_cy_income_chart);
mDbHelper = new BudgetDbHelper(this);
sqLiteDatabase = mDbHelper.getWritableDatabase();
ArrayList<BarEntry> barEntries = mDbHelper.getBarEntries();
BarDataSet barDataSet = new BarDataSet(barEntries,"Income By Income Category");
barDataSet.setColors(ColorTemplate.COLORFUL_COLORS);
BarData barData = new BarData(barDataSet);
barData.setBarWidth(0.9f);
barChart.setData(barData);
}
}
您的问题是 barChart
为空,因为您从未将其设置为任何值。你需要像
这样的东西
barChart = findViewById(R.id.my_chart);
在那之前你可以打电话
barChart.setData(barData);
我有一个 MPAndroidChart,我想用它来显示 SQL 查询的结果,给出我的收入列的总和并按 income_category 对其进行分组。这里的另一个用户让我更接近于让它工作,但是我在执行 BarChart.setData 时收到空对象引用错误。调试显示查询有效,所以我不知道为什么它为空。下面是 BudgetDbHelper 中的代码:
public ArrayList<BarEntry> getBarEntries() {
String income_sum_column = "income_sum";
SQLiteDatabase db = this.getReadableDatabase();
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;
这里是 CYIncomeChartActivity 的代码:
public class CYIncomeChartActivity extends AppCompatActivity {
SQLiteDatabase sqLiteDatabase;
// Database helper object //
private BudgetDbHelper mDbHelper;
BarChart barChart;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_cy_income_chart);
mDbHelper = new BudgetDbHelper(this);
sqLiteDatabase = mDbHelper.getWritableDatabase();
ArrayList<BarEntry> barEntries = mDbHelper.getBarEntries();
BarDataSet barDataSet = new BarDataSet(barEntries,"Income By Income Category");
barDataSet.setColors(ColorTemplate.COLORFUL_COLORS);
BarData barData = new BarData(barDataSet);
barData.setBarWidth(0.9f);
barChart.setData(barData);
}
}
您的问题是 barChart
为空,因为您从未将其设置为任何值。你需要像
barChart = findViewById(R.id.my_chart);
在那之前你可以打电话
barChart.setData(barData);