Aus der Datenbank die Werte in den Graphen setzen

  • Antworten:13
  • OffenNicht stickyNicht beantwortet
  • Forum-Beiträge: 82

24.05.2020, 09:58:33 via Website

Guten Morgen zusammen,

ich möchte gerne die Wetterwerte in dem Fall nur die Temperaturwerte aus der Datenbank in den Graphen speisen.

Wie könnte ich das am besten machen?

// we get graph view instance
GraphView graph = (GraphView) findViewById(R.id.graphen);
series = new LineGraphSeries<>(new DataPoint[]{

   });
    graph.addSeries(series);
    // customize a little bit viewport
    Viewport viewport = graph.getViewport();
    viewport.setYAxisBoundsManual(true);
    viewport.setMinY(-20);
    viewport.setMaxY(45);
    viewport.setMaxX(24);
    viewport.setScrollable(true);

 try {
            //Driver
            Class.forName("com.mysql.jdbc.Driver");
            //connection to Database
            connection = DriverManager.getConnection("jdbc:mysql://:3306/", "sql2342707", "!");
            System.out.println("Verbunden");

            // Create and execute a SELECT SQL statement.
            String selectSql = "SELECT * FROM wetterdaten";

                      //Durchsuchen der Database nach dem gewünschten Wert
            try (Statement statement = connection.createStatement();
                 ResultSet resultSet = statement.executeQuery(selectSql)) {

                while (resultSet.next()) {


                    temperatur = resultSet.getDouble("Temperatur");

                    //Die Werte werden in den Graphen gesetzt
                    series.appendData(new DataPoint(temperatur,4),false,100);




                }

Gruß,

Janoroid

Diskutiere mit!
  • Forum-Beiträge: 11.137

24.05.2020, 10:55:24 via Website

Hallo Janoroid,

Daten mit Android direkt aus der Datenbank laden, ist i.d.r. keine gute Idee.
Damit könnte nämlich potentiell jeder der die App hat, auf deine DB komplett zugreifen. (vorausgesetzt mindestens eins davon ist öffentlich).
Lieber hast du ein Backend mit API und dann musst du aus Android nur noch HTTP Anfragen schicken.

Was ist aber bei dir genau das Problem? Funktioniert die ChartLib nicht oder die Verbindug zur DB?

LG Pascal //It's not a bug, it's a feature. :) ;)

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 82

24.05.2020, 11:01:32 via Website

Danke für die Warnung!

Die Verbindung zur Datenbank wird erfolgreich aufgebaut und ich bekomme auch Werte ausgegeben. Nur stürzt die App ab, wenn die Werte in den Graphen gespeist werden soll.

Mit freundlichen Grüßen,

Janoroid

— geändert am 24.05.2020, 11:02:37

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 11.137

24.05.2020, 11:12:24 via Website

Welche Graph Lib nutzt du und was ist die Exception die du im Log (Logcat, rot merkiert) siehst?

LG Pascal //It's not a bug, it's a feature. :) ;)

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 82

24.05.2020, 11:16:49 via Website

Ich danke dir für deine Mühe :)

Ich bin zurzeit bei meine Freundin, kann ich kann erst heute Nachmittag dir die Information geben

Gruß,

Janoroid

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 1.383

24.05.2020, 11:18:23 via Website

Hallo was mir beim kurzen drüber schauen auffällt ist das du in deiner Series Variablen nichts hast.

series = new LineGraphSeries<>(new DataPoint[]{

});

Ist da wirklich nichts oder verheimlicht du uns das . wenn ja ist aber wichtig.

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 11.137

24.05.2020, 11:20:50 via Website

@Jokel: Die Series ist zwar leer initialisiert, aber er fügt ja unten Werte ein mit:

 series.appendData(new DataPoint(temperatur,4),false,100);

Das sollte ja reichen

LG Pascal //It's not a bug, it's a feature. :) ;)

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 1.383

24.05.2020, 11:39:56 via Website

nein
er will ein Feld, Array DataPoint[] erstellen.

LineGraphSeries < DataPoint > series = new LineGraphSeries < > (new DataPoint[] {
new DataPoint(0, 1),.......});

übergeben tut er nur ein objekt "DataPoint". und kein Array "DataPoint[]".

series.appendData(new DataPoint(temperatur,4),false,100);

in seiner Liste ist es arber ein Array .

passt nicht zusammen.

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 82

24.05.2020, 11:43:35 via Website

Ne, dort habe ich nichts reingemacht, weil sonst die Werte auch in den Graphen gepackt wird.

Gruß,
Janoroid

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 11.137

24.05.2020, 11:46:33 via Website

Nach der Doku initialisiert man eine LineGraphSeries mit einem Array (Generisch) in diesem Fall vom Typ DataPoint.
http://jjoe64.github.io/GraphView/javadoc/com/jjoe64/graphview/series/LineGraphSeries.html

Man kann den Konstruktor auch leer lassen, kommt aufs gleiche raus.
mit appendData kann man ein Elemenent anhängen.

appendData(E dataPoint, boolean scrollToEnd, int maxDataPoints, boolean silent)

Also alles richtig. Ich vermute dass die LineGraphSeries nicht auf einem Array arbeitet, sondern das Array in einer interne Datenstruktur überführt mit der dann gearbeitet wird.

— geändert am 24.05.2020, 11:48:23

LG Pascal //It's not a bug, it's a feature. :) ;)

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 1.383

24.05.2020, 12:37:18 via Website

@Pascal Ok habe Übersehen das es "appendData" heist und nicht nur "append"
Ist ja eine Methode der Klasse Line... soweit gut.

jetzt währe aber interesant wo genau die App abstürtzt oder was genau nicht geht.

— geändert am 24.05.2020, 12:38:07

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 1.383

24.05.2020, 14:18:29 via Website

Hallo dein Problem sehe ich trotzdem in dieser Zeile.

series.appendData(new DataPoint(temperatur,4),false,100);

du hast immer den zweiten Wert (Y) auf 4 somit wird nur ein Punkt oder ein Strich gezeichnet werden.
y immer gleich sollte einen waagerechten Strich geben.
da der Maßstab sich selber anpasst ist er wohl ganz unten.

Auch wenn du 100 Temperatur Werte in deiner DB hast und die in der while Schleife aus liest.

Y ist eigentlich die Temperatur und X ist die Zeit. Du zeichnest in ein Koordinaten System x,y Paare.

int x =0;
while (resultSet.next()) {
temperatur = resultSet.getDouble("Temperatur");
//Die Werte werden in den Graphen gesetzt
series.appendData(new DataPoint(x,temperatur),false,100);
x=x+1;
}

— geändert am 24.05.2020, 14:26:48

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 82

24.05.2020, 19:12:14 via Website

Jetzt hat es geklappt :).

Nur bekomme ich die Fehlermeldung: new x-value must be greater then the last value. x-values has to be ordered in ASC.

Ich weiß auch nicht, wieso die Meldung kommt,da die Variable "X" um eins erhöht wird.

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 1.383

24.05.2020, 19:49:57 via Website

DataPoint(double x, double y)

benutze mal ein "double" für das X

Hilfreich?
Diskutiere mit!