Java 如何用MSSQL数据库中的数据填充MPAndroid饼图?

Java 如何用MSSQL数据库中的数据填充MPAndroid饼图?,java,android,sql-server,pie-chart,mpandroidchart,Java,Android,Sql Server,Pie Chart,Mpandroidchart,我是Android编程新手,我想用MSSQL数据库中的值填充饼图 有人能帮我一下吗?我已经被困了好一阵子了 我想在饼图中填充的值是“费用金额”和“费用类别”,它们位于我的“费用”表下 到目前为止我已经知道了,但它不起作用 final Spinner budgetNameSpinner = (Spinner) getView().findViewById(R.id.BudgetNameSpinner); String chosenBudget = budgetNam

我是Android编程新手,我想用MSSQL数据库中的值填充饼图

有人能帮我一下吗?我已经被困了好一阵子了

我想在饼图中填充的值是“费用金额”和“费用类别”,它们位于我的“费用”表下

到目前为止我已经知道了,但它不起作用

        final Spinner budgetNameSpinner = (Spinner) getView().findViewById(R.id.BudgetNameSpinner);
        String chosenBudget = budgetNameSpinner.getSelectedItem().toString();
        String s = getActivity().getIntent().getExtras().getString("UserLoginDetails");
        if (DbConnectionClass.connection == null) {
            new DbConnectionClass().connectDB();
        }
        if (DbConnectionClass.connection != null) {
            Statement statement = null;
            try {
                statement = DbConnectionClass.connection.createStatement();
                String query = "SELECT expenses_category, SUM(expenses_amount) AS TotalExpenses FROM EXPENSES_T LEFT JOIN USERLOGINDETAILS_T ON EXPENSES_T.username_id_fk = USERLOGINDETAILS_T.user_id LEFT JOIN BUDGET_T ON EXPENSES_T.budget_id_fk = BUDGET_T.budget_id WHERE USERLOGINDETAILS_T.user_name = '" + s + "' AND BUDGET_T.budget_name = '" + chosenBudget + "' GROUP BY expenses_category";
                ResultSet rs = statement.executeQuery(query);
                //ArrayList<PieEntry> data = new ArrayList<>();
                List<PieEntry> pieEntries = new ArrayList<>();
                int size = 0;
                if (rs != null) {
                    rs.last();
                    size = rs.getRow();
                }
                for (int i = 0; i < size; i++) {
                    String ExpenseCategories = rs.getString("expenses_category");
                    Float ExpenseAmount = rs.getFloat("TotalExpenses");
                    Float eC[] = {ExpenseAmount};
                    String eA[] = {ExpenseCategories};
                    pieEntries.add(new PieEntry(eC[i], eA[i]));
                }
                    PieDataSet dataSet = new PieDataSet(pieEntries, "Expenses");
                    PieData data = new PieData(dataSet);
                    //get chart
                    PieChart chart = (PieChart) getView().findViewById(R.id.piechart);
                    dataSet.setColors(ColorTemplate.COLORFUL_COLORS); //set color
                    chart.setData(data);
                    chart.animateY(1000); //animate pie chart
                    chart.invalidate();


            } catch (Exception e) {

            }
最终微调器budgetNameSpinner=(微调器)getView().findViewById(R.id.budgetNameSpinner);
字符串chosenBudget=budgetNameSpinner.getSelectedItem().toString();
字符串s=getActivity().getIntent().getExtras().getString(“UserLoginDetails”);
if(DbConnectionClass.connection==null){
新的DbConnectionClass().connectDB();
}
if(DbConnectionClass.connection!=null){
Statement=null;
试一试{
语句=DbConnectionClass.connection.createStatement();
String query=“选择费用类别,总和(费用金额)作为费用的总费用\u T LEFT JOIN USERLOGINDETAILS\u T ON EXPENCES\u id\u fk=USERLOGINDETAILS\u T.user\u id LEFT JOIN BUDGET\u ON EXPENCES\u BUDGET\u id\u fk=预算\u T BUDGET\u id其中USERLOGINDETAILS\u T.user\u name=”“+s+”,BUDGET\u BUDGET\u name=“+chosenBudget+“‘按费用类别分组’;
ResultSet rs=语句.executeQuery(查询);
//ArrayList数据=新的ArrayList();
列表项=新的ArrayList();
int size=0;
如果(rs!=null){
rs.last();
大小=rs.getRow();
}
对于(int i=0;i

上面的代码是我试图从Youtube上获得的一个简单代码中修改的。

我从mssql中获得了一个piechart,但我在异步上执行请求,然后调用方法SetupData()在视图中设置数据

查询的异步代码段

 String query = "your query";
                Statement stmt = connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
                        ResultSet.CONCUR_READ_ONLY);
                ResultSet rs = stmt.executeQuery(query);
                sumaporcentajes = 0;
                while (rs.next()) {
                    EntDataTorta item = new EntDataTorta(
                            rs.getString("Categoria"),
                            rs.getFloat("Cantidad")
                    );
                    listaTorta.add(item);

                }
然后在我的活动中我有了这个方法

public void setUpData() {
    //used by async on finished
    PieChart piechart = findViewById(R.id.pieChart);
    lDatos.clear();
    lDatos.removeAll(lDatos);
    for (int i = 0; i < lItems.size(); i++) {
        lDatos.add(new PieEntry(lItems.get(i).getPorcentaje(), lItems.get(i).getCategoria()));
    }
    //Creo un dataset y se lo seteo al gráfico
    PieDataSet set = new PieDataSet(lDatos, "");
    PieData data = new PieData(set);
    piechart.setCenterTextTypeface(Typeface.DEFAULT_BOLD);
    Legend legend = piechart.getLegend();
    legend.setEnabled(true);
    DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyyMMdd").withLocale(Locale.CANADA);
    sDesde = formatter.withLocale(Locale.CANADA).parseLocalDate(sDesde).toString();
    sHasta = formatter.parseLocalDate(sHasta).toString();

    if (bHistorico) {
        sHasta = LocalDate.now().toString();
        bHistorico = false;
    }
    piechart.setCenterText("Cantidad de Consultas: " + sumaporcentajes);
    piechart.getDescription().setText("Periodo de tiempo sDesde: " + sDesde + "  sHasta " + LocalDate.now().minusMonths(meses).dayOfMonth().withMaximumValue());
    piechart.getDescription().setTextColor(0xFFFFFFFF);
    piechart.getDescription().setTextSize(12f);
    set.setColors(ColorTemplate.COLORFUL_COLORS);
    set.setValueFormatter(new MyValueFormatter());
    piechart.setData(data);
    piechart.invalidate(); // refresh
}
public void setUpData(){
//在完成时由异步使用
PieChart PieChart=findViewById(R.id.PieChart);
lDatos.clear();
lDatos.removeAll(lDatos);
对于(int i=0;i

我希望这些代码片段能对您有所帮助。

您能提供更多关于您的数据库和代码的信息吗?嗨,汤普森,我已经更新了这篇文章,为我的问题提供了更多信息。@ThompsonspartaHi Joaquin,谢谢您的回复!我通过修改我的代码并以您的答案作为参考,成功地完成了工作。祝您有愉快的一天!