SQLite
 sql >> Teknologi Basis Data >  >> RDS >> SQLite

bagaimana cara mengubah warna Bar di MPandroidCharts berdasarkan beberapa nilai individual yang disimpan dalam sqlite?

Seperti yang saya pahami, Anda ingin memplot bilah berdasarkan bunk tetapi warnai berdasarkan credits . Menggunakan dataset bilah kustom adalah pendekatan yang tepat, hanya perlu sedikit memodifikasinya. Kode di bawah mendapatkan apa yang Anda gambarkan.

Perubahan yang saya buat:

  • Tidak dapat meneruskan daftar nama ke BarData , gunakan pemformat nilai sumbu sebagai gantinya
  • Mengubah kumpulan data bilah khusus untuk menyimpan credits Himpunan. Tidak yakin apakah getEntryForXIndex your Anda metode didefinisikan di tempat lain, tetapi tidak ada dalam kode yang Anda posting.
  • Panggilan yang tidak digunakan lagi dan sintaks yang tidak valid telah dihapus (tidak dapat memanggil setDescription(""); )

Jika ini bukan yang Anda cari, perbarui pertanyaan dengan lebih detail tentang apa yang Anda lihat dll... Sejauh yang saya tahu pertanyaannya adalah tentang bagan dan bukan tentang database 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);
        }
    }
}

EDIT: Selain tentang database SQL - jangan panggil queryXData dan queryYData di dalam lingkaran! Ini akan mengekstrak seluruh array data setiap iterasi loop, lalu lagi di dalam loop itu sendiri (sangat mahal). Cukup gunakan sesuatu seperti ini sebagai gantinya:

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. Kurangi Tahun dari Tanggal di SQLite

  2. 2 Cara Menambahkan Tanda Persen ke Angka di SQLite

  3. Android SQLiteDB tidak selesai menambahkan nilai

  4. Bagaimana SQLite Rtrim() Bekerja

  5. 4 Cara Mendaftar Tampilan dalam Database SQLite