MySQL Synchronisation

M

MaikB85

Gast
Hallo

Ich bin noch relativ neu in der Android Entwicklung und bräuchte mal etwas Hilfe bei der Umsetzung meiner App.

Über die App soll die Technik meines Aquariums gesteuert werden können. Dazu habe ich einen Arduino MEGA, der Verbindung zu einer MySQL Datenbank hat, die auf einem Raspberry PI läuft. Der Adruino fragt Einstellungen ab, die in der Datenbank gesetzt wurden und schickt aktuelle Messwerte an die Datenbank. Das läuft auch alles schon.

Jetzt habe ich mit der App angefangen und habe auf der MainActivity eine Übersicht der aktuellen Messwerte. Diese frage ich von der Datenbank ab indem ich von der App eine php-Datei aufrufe die mir ein JSON Object zurückliefert. All das wird in einem AsyncTask abgearbeitet. So funktioniert das auch schon.

Jetzt zu meiner Frage:
Die Daten die angezeigt werden sollen sich alle paar Sekunden automatisch aktualisieren. Jetzt wollte ich da erst mit einem Timer arbeiten aber irgendwie weiß ich nicht genau wie man das umsetzt im Zusammenhang mit AsyncTasks. Oder wie könnte man das besser lösen?

Gruß Maik
 
Einen normalen Thread der deine Mthoden aufruft würde genügen mMn


PHP:
public void run()
{
    while(isRunning)
    {
        try
        {
            sleep(someSeconds*1000);
        }
        catch (InterruptedException e)
        {}
	
        updateTheValues();
    }	
}
 
Oder per Service im Hintergrund...
 
Ja über einen Service habe ich auch schon nachgedacht. Werde mir die beiden Sachen mal ansehen.
Ich will nicht immer alle Daten komplett abrufen. Also auf der MainActivity wird nur eine Übersicht der aktuellen Werte angezeigt. Später soll noch activities dazu kommen wo ein Verlauf von z. B. Temperaturen über eine bestimmte Zeit in einem Graph angezeigt werden. Diese Daten sollen aber nur dann abgerufen werden wenn ich die brauche
 
Ich verstehe nicht ganz, wieso das alles kontinuierlich passieren soll. Du kannst auch, wenn du die Daten brauchst, diese "seit dem letzten Zeitstempel" aus der DB ziehen. Spart massig Strom, wenn das Gerät zwischendurch schlafen darf :D
 
Das mache ich ja. Der soll natürlich nur die neusten Daten auf der MainActivity anzeigen wenn diese auch sichtbar ist. Wenn die App geschlossen ist soll da nix passieren

Also so lange die Hauptseite sichtbar ist werden alle 5 sek neue Daten abgefragt. So soll das sein.
 
Zuletzt bearbeitet von einem Moderator:
wenn du das mit thread amchst dann einfach killen und immer wieder einen neuen starten...
 
Okay danke dann probier ich das mal ;)
 
Ok Danke ihr habt mir sehr geholfen! Habe mich jetzt für die Lösung mit dem timer entschieden, da dieser ja sowieso in einen neuen Thread ausgeführt wird.

So habe ich es jetzt gemacht:
Code:
public void startTimer() {
        refreshTimer = new Timer();
        timerTask = new TimerTask() {
            @Override
            public void run() {
                jobj = jsonparser.makeHttpRequest("http://192.168.178.26/arduino/get_current_values.php");

                try {
                    ledvals = jobj.getJSONArray("light1");
                    JSONObject c = ledvals.getJSONObject(0);
                    t1 = c.getString("led1") + "%";

                    ledvals = jobj.getJSONArray("light2");
                    c = ledvals.getJSONObject(0);
                    t2 = c.getString("led2") + "%";

                    ledvals = jobj.getJSONArray("light3");
                    c = ledvals.getJSONObject(0);
                    t3 = c.getString("led3") + "%";

                    ledvals = jobj.getJSONArray("light4");
                    c = ledvals.getJSONObject(0);
                    t4 = c.getString("led4") + "%";

                    ledvals = jobj.getJSONArray("light5");
                    c = ledvals.getJSONObject(0);
                    t5 = c.getString("led5") + "%";
                } /*catch (JSONException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }*/ catch (Exception e) {
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            Toast.makeText(MainActivity.this, "Fehler beim Abrufen der Daten!",
                                    Toast.LENGTH_LONG).show();
                        }
                    });
                    e.printStackTrace();
                }

                try {
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            led1val.setText(t1);
                            led2val.setText(t2);
                            led3val.setText(t3);
                            led4val.setText(t4);
                            led5val.setText(t5);
                        }
                    });

                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        };

        refreshTimer.schedule(timerTask, 0, 10000); //Alle 10 sec Daten aktualisieren
    }
 

Ähnliche Themen

B
Antworten
0
Aufrufe
685
basementmedia
B
KL7000F
  • KL7000F
Antworten
9
Aufrufe
1.005
KL7000F
KL7000F
H
Antworten
6
Aufrufe
1.151
haner
H
Zurück
Oben Unten