Android MPAndroidChart problema visualizzazione date su asse X

Giovanni255

Nuovo Utente
54
4
Buongiorno a tutti,

con Android Studio (linguaggio Kotlin) sto impostando un Line Chart con MPA al fine di visualizzare la data sull'asse X e l'importo di un pagamento su asse Y.
Come da titolo ho un problema nella visualizzazione della data; riporto il codice.


Java:
// Init line-chart
private fun initLinechartTransactions() {
    val linechartDataSet = LineDataSet(linechartData(), "lbl")
    
    val linechartData = LineData(linechartDataSet)
    lineChartTransactions.animate()

    lineChartTransactions.invalidate()
}


// Parse date
private fun dateParse(stringDate: String): Date {
    val format = SimpleDateFormat("dd/MM/yyyy")
    return format.parse(stringDate)
}


// Get data from DB
private fun linechartData(): List<Entry> {
    val dataValues: MutableList<Entry> = ArrayList()

    val cursor = dataDB?.getTransactions() as Cursor
    for (i in 0 until cursor.getCount()) {
        cursor.moveToNext()
        
        dataValues.add(
            Entry(
                dateParse(cursor.getString(2)), // Text
                cursor.getFloat(1), // Amount
            )
        )
    }
    
    return dataValues
}

La data viene recuperata da SQLite (salvata nel formato "dd/MM/yyyy") e sto cercando di salvarla in un oggetto "Entry" (con la seguente istruzione " dateParse(cursor.getString(2))") ma senza successo, dato che Entry richiede un tipo float e non so come recuperarlo dalla data.

Come posso risolvere?

Grazie in anticipo
 

Andretti60

Utente Èlite
6,440
5,091
Eh, vi siete messi in un bel casino.

Non conosco Kotlin ma conosco SQLite, che per sè non ha un tipo “Date” quindi occorre memorizzare la data o usando un formato noto (tipo un timestamp Unix che è un intero) oppure in una stringa formattata ISO (che nel vostro caso sarebbe YYYY-MM-DD). SQLite ha una serie di funzioni che permettono di estrarre e formattare stringhe in altri formati, ma solo se il formato iniziale è noto.

Nel tuo caso, una possibile soluzione è leggere la stringa contenuta nella colonna della data, e “a mano” farne il parser e convertirla nel formato richiesto da Entry().

La soluzione migliore per me è di ricostruire il database cambiando il formato della colonna, o aggiungendo una ulteriore colonna nel formato giusto. È draconiano, ma eviterà ulteriori problemi, è la soluzione migliore quando ci si accorge che un dato non è stato memorizzato correttamente.
 
  • Mi piace
Reazioni: Ibernato

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!