Mam problem, gdy ustawiam wartość z sqlite na etykietę osi x. to jest zdjęcie A mój kod sformatowany dla osi X to

Axis.setValueFormatter(new IAxisValueFormatter() {
        @Override
        public String getFormattedValue(float value, AxisBase axis) {
            String selectQueryz = "SELECT  * FROM table_palembang";
            db = new DBHelper(getApplicationContext());
            SQLiteDatabase dbz = db.getWritableDatabase();
            Cursor cursorz = dbz.rawQuery(selectQueryz, null);
            countz = cursorz.getCount();
            String[] datez = new String[countz];
            ArrayList<String> arral = new ArrayList<>();
            for (int k = 0; k < countz; k++) {
                cursorz.moveToNext();
                datez[k] = cursorz.getString(2);
                arral.add(datez[k]);
            }
            return datez[countz % arral.size()];
        }
    });

Czy ktoś może mi pomóc? dzięki ...

0
Agung 7 listopad 2018, 11:09

1 odpowiedź

Najlepsza odpowiedź

ValueFormatter służy do formatowania danych, które ustawiasz za pomocą chart.setData(), aby nie ustawiać samych danych.

Oto przykładowy kod, jak sformatować daty

xAxis.setValueFormatter(new IAxisValueFormatter() {

    private final SimpleDateFormat mFormat = new SimpleDateFormat("dd MMM HH:mm", Locale.ENGLISH);

    @Override
    public String getFormattedValue(float value, AxisBase axis) {

        long millis = TimeUnit.HOURS.toMillis((long) value);
        return mFormat.format(new Date(millis));
    }
});

EDYTUJ

Właśnie rzuciłem okiem, że przechowujesz indeksy tablicy dat do danych wykresu. Jeśli tak, wystarczy zwrócić datę z tablicy dat.

String[] datez;
String selectQueryz = "SELECT  * FROM table_palembang";
db = new DBHelper(getApplicationContext());
SQLiteDatabase dbz = db.getWritableDatabase();
Cursor cursorz = dbz.rawQuery(selectQueryz, null);
countz = cursorz.getCount();
datez = new String[countz];
for (int k = 0; k < countz; k++) {
    cursorz.moveToNext();
    datez[k] = cursorz.getString(2);
}
xAxis.setValueFormatter(new IAxisValueFormatter() {

    @Override
    public String getFormattedValue(float value, AxisBase axis) {

        return datez[(int) value];
    }
});

PS Wywołania bazy danych powinny być wykonywane w wątku w tle.

4
Vygintas B 7 listopad 2018, 12:22