Datenübertragung vom Server zur Applikation ?

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Datenübertragung vom Server zur Applikation ?

    Hey Leute,

    bin etwas verzweifelt und poste es daher jetzt einfach mal bei Euch: Habe eine iOS App die Daten (Bilder) hauptsächlich vom Server erhält, selten auch solche an den Server schickt.

    Bisher übertrage ich die Bilder, verpackt mit anderen Daten per JSON. Bilder encodiere ich mit BASE64. Klappt wunderbar. Nur sind BASE64-Daten zu ca. 33% größer. Und gerade bei mobilen Datenverbindungen sollte man ja Volumen sparen.

    Habt ihr einen Tipp für mich wie man VOM Server (PHP) zur App Bilder mit ein paar zusätzlichen Infos (Text) am effizientesten übertragt?

    DANKE!
    Daniel
  • Am besten überträgst Du die Bilder einzeln und die Metadaten in einer JSON-Datei. Die Bilder solltest Du jeweils dann laden, wenn der Nutzer sie angezeigt bekommen soll. Mit diesem Vorgehen kannst Du auch die Bilder recht gut cachen; insbesondere, wenn Dein Server die entsprechenden HTTP-Header sinnvoll setzt.
    „Meine Komplikation hatte eine Komplikation.“
  • macmoonshine schrieb:

    die die Daten aus der Datenbank liest und zurück liefert.


    Ja stimmt, das ist mir bekannt. Ich mache auch schon eine asynchrone Abfrage. Mir geht es hier genau um dein "zurück liefert". Wandle ich einfach den Datenstrom, der bei der App ankommt, in ein Image um? Dann könnte ich ja z.B. einfach die Daten aus der Datenbank 1:1 per PHP-Echo ausgeben. Bekomm ich da keine Probleme mit Sonderzeichen usw?
  • Die zurückgelieferten Daten kannst Du über initWithData: in ein Bild umwandeln. Du musst die Daten als Bytefolge aus der Datenbank in einen PHP-String einlesen. Das sind im Prinzip auch nur blöde Bytefolgen. Encoding-Probleme kann es bei der Übertragung nicht geben, weil Du ja binäre Daten und keine Zeichenketten überträgst. Allerdings sind die Daten je nach Datenbank und verwendeter Auslesemethode unterschiedlich kodiert und müssen ggf. dekodiert werden.

    Verwendest Du MySQL oder ein richtiges DBMS?
    „Meine Komplikation hatte eine Komplikation.“
  • Praktisch würde ich dann eine NSURLConnection für die Text-Infos und eine NSURLConnection für jedes einzelne Bild machen oder?

    Ist dieses vorgehen dann so sinnvoll?:
    - text-infos holen und z.b. in singleton speichern
    - bild1 holen + speichern
    - bild2 holen + speichern....
    - ein View weiterschalten und dort diese Daten anzeigen
  • normal holst du dir die daten die du brauchst um die struktur anzuzeigen (also zb kennst du dann die bild-ids eventuell die titel, beschreibungen etc).
    diese stellst du dann in der GUI dar. für die bilder schaust du in den cache ob schon geladen. falls schon geladen dann dieses anzeigen ansonsten zeigst du einen placeholder an und holst das bild asynchron vom server (diese speicherst du dann in den cache und zeigst anstatt dem placeholder das bild an). das ganze eben asyncron dass man die app verwenden kann auch wenn noch nicht alle bilder geladen sind.
  • danyball schrieb:

    Praktisch würde ich dann eine NSURLConnection für die Text-Infos und eine NSURLConnection für jedes einzelne Bild machen oder?

    Ich würde das Bild erst dann laden, wenn Du es anzeigst. Wenn Du den Last-Modified- und Cache-Header sinnvoll setzt, übernimmt Cocoa Touch das speichern für Dich. Du kannst auch die Bilder selber cachen.
    „Meine Komplikation hatte eine Komplikation.“
  • Ah ok. Ja stimmt, so kennt man es. Super Link, danke macmoonshine!

    Bei meiner App ist die Zielrichtung etwas anders. Die Bilder die ich laden muss werden erst angezeigt wenn sie auch wirklich alle geladen sind. Dann werden sie angezeigt und danach werden sie nicht mehr benötigt. Somit hat sich das Caching erledigt. Dennoch sehr interessant was cocoa touch so kann...! Das autom. cachen mit sinnvoll gesetzten headern werd ich mir nochmal genauer ansehen.
  • MarkusM schrieb:

    Ist BASE64 eine Vorgabe? Ich bin mir sicher, dass es noch einige Stellen gibt, die mit einer 7-Bit Modemverbindung ans Internet angeschlossen sind. Für deine Fall trifft dieses hoffentlich nicht mehr zu.

    Warum nutzt Du also BASE64?


    weil er die bilddaten IM json drin hatte.
    jetzt macht ers ja indem er die bilder einzeln abhalt (also nicht mehr base64 kodiert).