2012-04-07 7 views
1

Ich entwickle gerade und bin zu der folgenden Frage gekommen: Wie kann/soll ich grundlegende Informationen speichern, z. B. entsperrte Elemente und Ebenen zwischen Geräten? Natürlich speichere ich sie in Preference-Dateien.Empfohlene Methode zum Synchronisieren von Informationen zwischen Geräten

Aber was ist, wenn der Benutzer ein neues Handy kauft und will weiter dort spielen? (Shared-) Einstellungen werden nicht dupliziert.

Also, gibt es irgendwelche (von Google) empfohlenen Weg (Cloud?), Um dieses Problem zu lösen?

+0

Durch die Implementierung eines [backup agent] (http://developer.android.com/guide/topics/data/backup.html) können Sie die Konfiguration zwischen den Telefonen beibehalten, wenn der Benutzer nichts Ungewöhnliches tut - wie das Ändern sein Google-Konto für Market verwendet. – Jens

Antwort

1

Ich bin kein Experte, aber die Art, wie ich das mache, ist mit einer Online-SQL-Datenbank. Lassen Sie das Gerät eine Verbindung herstellen und speichern/laden Sie alle Daten, die Sie benötigen. Ich weiß, das wird nicht mit Dateien funktionieren, nur textbasierte Informationen. Ich mache das auch mit Flash. Wenn dies Ihre Route ist, kann ich Code teilen.

Ok, also brauchst du 3 Dinge, wenn du das in Flash machst: Flash (duh), PHP-Dateien und einen SQL-Server (ich habe einen MYSQL-Server).

Wie es funktioniert ist, wird Flash laden PHP, PHP wird es tun (wie Änderungen an der Datenbank) und spucke es zurück, Ergebnisse zu blinken.

Sagen wir, wir wollen alle Benutzernamen aus der Datenbank bekommen.

Datenbank

Der Tabellenname ist "Players" mit einer einzigen Spalte namens "u_id"

Flash-

var loader:URLLoader; //makes a loader that will "load" the php page 

public function DoIt() 
{ 
    loader = new URLLoader(); 
    loader.addEventListener(Event.COMPLETE, loaderComplete); 
    loader.load(new URLRequest("http://yourDomain.com/thePHPFile.php?arg=42")); 
} 

public function loaderComplete(e:Event):void 
{ 
    var returnXML:XML; //we are assuming the return values are in xml format, trust me, this might be easier 

    for each (var ListItem:XML in returnXML..Users) //you might need to change this "users" to be the root of the xml file 
    { 
     var userName:String = ListItem.u_id.toString(); 
     //you can do what you want with the data here 
    } 
} 

PHP

es jetzt genannt möglicherweise nicht erforderlich d, aber ich versuche, die PHP-Dateien, um sicherzustellen, und die DB ist auf dem gleichen Host, so dass ich „localhost“ als Hostnamen tun kann

<?php 

    $argumentVar = $_GET["arg"]; //not using this, just showing it's possible 
    $connect = mysql_connect("localhost", "db_username", "db_password"); 

    if(!$connect) 
    { 
     die("error connecting to DB" . mysql_error()); 
    } 

    $db_selected = mysql_select_db("the_name_of_the_db", $connect); 

    if(!$db_selected) 
    { 
     die("error selecting db" . mysql_error()); 
    } 

    $table_name = "Players" //this is the name of your database 
    $sql = "SELECT * FROM $table_name;"; //not sure if you need ending ';' 

    $dbresult = mysql_query($sql, $connect); //this is where all your data comes into 

    //and now to save all the information to a xml file 
    $doc = new DOMDocument('1.0'); 
$root = $doc->createElement('root'); 
$root = $doc->appendChild($root); 

    while($row = mysql_fetch_assoc($dbresult)) 
{ 
    $occ = $doc->createElement($table_name); 
    $occ = $root->appendChild($occ); 

    foreach ($row as $fieldname => $fieldvalue) 
    { 
     $child = $doc->createElement($fieldname); 
     $child = $occ->appendChild($child); 

     $value = $doc->createTextNode($fieldvalue); 
     $value = $child->appendChild($value); 
    } 
} 

$xml_string = $doc->saveXML(); 
echo $xml_string; 
?> 

Ok, damit gehen spielen, sollte es Ihnen beginnt auf dem richtigen Weg.

+0

Teilen von Code wäre in jeder Hinsicht toll :) ([email protected] wenn persönlich) – poitroae

1

Ich denke, der beste Weg wäre, eine Online-Datenbank zu pflegen, die regelmäßig mit den neuesten Informationen für jeden registrierten Benutzer aktualisiert wird. Anstatt also alles lokal zu speichern, kann es auf einem Remote-Server gespeichert und bei Bedarf an den Benutzer gesendet werden. Solange der Benutzer das von ihm für die Anwendung erstellte Konto besitzt, gehen keine Daten verloren.