# Aktualisierung einer ListView mit Daten aus MySQL-DB



## digit1 (13. Mrz 2015)

Hallo zusammen,

da Ich noch Anfänger bin hoffe Ich auf eure Hilfe und Tipps.

Es geht um folgendes:

Für eine App möchte Ich gerne eine Datenbank (MySQL) namens „Lager“ auf einem Webserver anlegen in der Ich verschiedene Artikel mit [Id|Bestellnummer|Artikelbeschreibung|Preis|usw….] ablege.
Alle Artikel möchte Ich in einer Liste (ListView) darstellbar haben. Das ist auch an sich kein Problem….Abruf via SELECT * …

Nun ist meine Frage, wenn diese in der ListView sind (ListView in der App), gibt es eine einfach Lösung diese zu aktualisieren falls sich beispielsweise der Preis ändert? Ich denke, wenn Ich immer nochmal alle Artikel durchgehen/ abfragen muss und nicht nur die Geänderten, geht das doch bestimmt bei ein paar Tausend Artikeln zu Lasten der Perfomance oder? Gibt es hierzu bestimmte Konzepte, Beispiele oder Schlagwörter?
Kann man einen ChangeListeren o.ä. programmieren? Was wäre eine Professionelle Art dies umzusetzen?

Ich hoffe Ich habe es einiger Maße verständlich beschrieben (DB zu ListView in App->Aktualisierung des geänderten Preises nur des betroffenen ListItems aus Performancegründen) und hoffe auf Tipps.

Danke und Gruß


----------



## CptSocket (15. Mrz 2015)

Hoi Digit

Wenn ich dich richtig verstanden habe, möchtest du nur diejenigen Artikel abrufen, bei welchen sich der Preis geändert hat. Korrekt?
Eine Variante wäre das erfassen eines zusätzlichen Feldes 'Änderungsdatum'. Im Service gibt es das zusätzliche Attribut 'geändert nach':
Wenn kein "geändert nach" übergeben wird, lieferst du alle Artikel zurück, sonst nur diejenigen, bei welchen das Änderungsdatum neuer als das übergebene Datum ist.


Ist das etwa das, was du benötigst?


Freundliche Grüsse
CptSocket


----------



## digit1 (16. Mrz 2015)

Danke für die Antwort CptSocket. Ziel wäre eigentlich nur die Zeilen neu an die LisrView zu übergeben in denen sich etwas geändert hat. Gibt es hierzu Konzepte bezüglich Android und MySQL? Weil wenn Ich für für jede Aktualisierung immer 1000000 Artikel auf Änderung prüfen muss geht das bestimmt zu lasten der Performance. Beispielhaft könnte Ich auch WhatsApp nehmen.....wie macht WhatsApp es die Änderungen, beispielsweise Bilder, Status usw. an die User zu übergeben? Und die ListViews im intergrund zu aktualisieren?


----------



## Joose (17. Mrz 2015)

digit1 hat gesagt.:


> Weil wenn Ich für für jede Aktualisierung immer 1000000 Artikel auf Änderung prüfen muss geht das bestimmt zu lasten der Performance.



Mit dem Ansatz von CptSocket überprüft die Datenbank das für dich (und das geht um schon relativ schnell) und als Ergebnis bekommst du nur die geänderten Zeilen aus der DB. Diese musst du dann natürlich deiner Liste hinzufügen.

PS: Natürlich sollte man dann entsprechende Tests machen und die Performance kontrollieren wenn diese wirklich so wichtig ist das es auf ms ankommt.


----------



## digit1 (17. Mrz 2015)

Was wäre aber wenn Ich noch jemanden via Login die Liste anschauen lassen möchte? Dann müsste Ich ja immer das Aktualisierungsdatum in Smartphone speichern um es dann mit dem Änderungsdatum der Datenbank zu vergleichen? Wie macht WhatsApp das den beispielsweise? Wenn man diese App öffnet aktualisiert sich ja auch alles im hintergrung? Sind deren Daten auch so in einer Datenbank organisiert?


----------



## Joose (18. Mrz 2015)

digit1 hat gesagt.:


> Was wäre aber wenn Ich noch jemanden via Login die Liste anschauen lassen möchte?



Es geht dir ja um die Aktualisierung der Daten, daher ist es nicht relavant ob da noch ein Login davor ist oder nicht.



digit1 hat gesagt.:


> Dann müsste Ich ja immer das Aktualisierungsdatum in Smartphone speichern um es dann mit dem Änderungsdatum der Datenbank zu vergleichen?



Was spricht dagegen? Was glaubst du wie andere Apps sowas machen?
Jede App legt spezifische Daten an um Einstellungen zu speichern oder das nächste "Starten" zu optimieren



digit1 hat gesagt.:


> Wie macht WhatsApp das den beispielsweise? Wenn man diese App öffnet aktualisiert sich ja auch alles im hintergrung? Sind deren Daten auch so in einer Datenbank organisiert?



Ich verwende kein WhatsApp, daher kann ich dir nicht sagen ob da ebenfalls eine Datenbank verwendet wird oder eine andere Art der persistenten Speicherung.

Ein weiterer Hinweis: Auf deinem Display haben nie und nimmer alle 1 Mio Einträge gleichzeitig Platz, oft werden nur X Datensätze geladen. Wobei X die Anzahl von Datensätze entspricht die am Display Platz haben + einige mehr (für ein flüssiges scrollen). Sprich du ladest nur soviele wie angezeigt werden können und ein paar davor + dahinter. Sobald du scrollst muss du entsprechende nachladen (im Hintergrund)


----------

