sql >> Databasteknik >  >> RDS >> SQLite

hur ändrar man stapelfärg i MPandroidCharts baserat på något individuellt värde lagrat i sqlite?

Som jag förstår det vill du plotta staplarna baserat på bunk men färglägg dem baserat på credits . Att använda den anpassade stapeldatauppsättningen är rätt tillvägagångssätt, behöver bara ändra det lite. Koden nedan får det du beskriver.

Ändringar jag gjort:

  • Kan inte skicka namnlistan till BarData , använd en axelvärdesformaterare istället
  • Ändrade anpassad stapeldatauppsättning till att även innehålla credits array. Inte säker på om ditt getEntryForXIndex Metoden är definierad på annat håll, men den finns inte i koden du postade.
  • Ta bort föråldrade anrop och ogiltig syntax (kan inte anropa setDescription(""); )

Om detta inte är vad du letar efter, uppdatera frågan med mer detaljerad information om vad du ser osv... Så vitt jag kunde förstå handlade frågan om diagrammet och inte om SQL-databasen.

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    BarChart chart = findViewById(R.id.test_chart);

    // Some made up data - replace these with your
    //  queryYdata, queryXdata, and queryZdata methods
    String[] names = new String[]{"foo","bar","fiz","bam","boo"};
    List<Float> credits = new ArrayList<>(Arrays.asList(1f,9f,2.5f,15f,50f));
    float[] bunks = new float[]{10f,15f,16f,20f,5f};

    List<BarEntry> entries = new ArrayList<>();
    for(int i = 0; i < bunks.length; ++i) {
        entries.add(new BarEntry(i, bunks[i]));
    }

    float textSize = 16f;

    MyBarDataset dataSet = new MyBarDataset(entries, "data", credits);
    dataSet.setColors(ContextCompat.getColor(this,R.color.green),
            ContextCompat.getColor(this,R.color.yellow),
            ContextCompat.getColor(this,R.color.red));
    BarData data = new BarData(dataSet);
    data.setDrawValues(false);
    data.setBarWidth(0.9f);

    chart.setData(data);
    chart.setFitBars(true);
    chart.getXAxis().setValueFormatter(new IndexAxisValueFormatter(names));
    chart.getXAxis().setPosition(XAxis.XAxisPosition.BOTTOM);
    chart.getXAxis().setTextSize(textSize);
    chart.getAxisLeft().setTextSize(textSize);
    chart.setExtraBottomOffset(10f);

    chart.getAxisRight().setEnabled(false);
    Description desc = new Description();
    desc.setText("");
    chart.setDescription(desc);
    chart.getLegend().setEnabled(false);
    chart.getXAxis().setDrawGridLines(false);
    chart.getAxisLeft().setDrawGridLines(false);

    chart.invalidate();
}

public class MyBarDataset extends BarDataSet{

    private List<Float> credits;

    MyBarDataset(List<BarEntry> yVals, String label, List<Float> credits) {
        super(yVals, label);
        this.credits = credits;
    }

    @Override
    public int getColor(int index){
        float c = credits.get(index);

        if (c < 8){
            return mColors.get(0);
        }
        else if (c < 13) {
            return mColors.get(1);
        }
        else {
            return mColors.get(2);
        }
    }
}

EDIT: En sida om SQL-databasen - anrop inte queryXData och queryYData inne i slingan! Detta kommer att extrahera hela datamatrisen varje loopiteration, sedan igen inuti själva loopen (mycket dyrt). Använd bara något sånt här istället:

ArrayList<BarEntry> yVals = new ArrayList<>();
ArrayList<Integer> yData = myhelper.queryYdata();
for (int i=0; i<yData.size(); i++){
    yVals.add(new BarEntry(i,yData.get(i)));
}

ArrayList<String> xData = myhelper.queryXdata();



  1. Postgres kopierar Heroku Production DB till lokal utveckling DB

  2. Använda PostgreSQL-replikeringsplatser

  3. ORA-04021:timeout inträffade i väntan på att låsa objekt

  4. Hur använder jag CONCAT-funktionen i SQL Server 2008 R2?