SQLite
 sql >> база данни >  >> RDS >> SQLite

как да променя цвета на лентата в MPandroidCharts въз основа на някаква индивидуална стойност, съхранявана в sqlite?

Както разбирам, искате да начертаете лентите въз основа на bunk но ги оцветете въз основа на credits . Използването на персонализирания набор от данни на лентата е правилният подход, просто трябва да го модифицирате малко. Кодът по-долу разбира това, което описвате.

Промени, които направих:

  • Не може да се предаде списък с имена към BarData , вместо това използвайте инструмент за форматиране на стойностите на ос
  • Променена персонализирана лента от данни, за да съдържа и credits масив. Не съм сигурен дали вашият getEntryForXIndex методът е дефиниран другаде, но не е в кода, който сте публикували.
  • Премахнати оттеглени обаждания и невалиден синтаксис (не може да се извика setDescription(""); )

Ако това не е това, което търсите, актуализирайте въпроса с повече подробности за това, което виждате и т.н.... Доколкото разбрах, въпросът беше за диаграмата, а не за SQL базата данни.

@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);
        }
    }
}

РЕДАКТИРАНЕ: Настрана относно SQL базата данни - не извиквайте queryXData и queryYData вътре в цикъла! Това ще извлече целия масив от данни на всяка итерация на цикъла, след това отново в самия цикъл (много скъпо). Вместо това използвайте нещо подобно:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Грешка в колоната _ID не съществува, въпреки че съществува в таблицата

  2. Android:onUpgrade не се обажда при надграждане на базата данни

  3. Върнете първия понеделник от всеки месец в SQLite

  4. Как да конвертирате милисекунди до дата в SQLite

  5. Android:Грешка при копиране на база данни (Sqliite) от папка с активи