建议在设备之间同步信息的方法

时间:2012-04-07 19:38:11

标签: android synchronization cloud preferences

我目前正在开发中,我提出了以下问题: 我应该/应该如何存储基本信息,例如设备之间的未锁定项目和级别。 当然,我将它们存储在首选项文件中。

但是,如果用户购买新手机并想继续在那里玩,该怎么办? (共享 - )首选项不会重复。

因此,是否有任何(来自谷歌)推荐的方式(云?)来解决这个问题?

2 个答案:

答案 0 :(得分:1)

我不是专家,但我这样做的方式是使用在线SQL数据库。让设备连接到它,并保存/加载您需要的任何数据。我知道这不适用于文件,只适用于基于文本的信息。我也是用Flash做的。如果这是你的路线,我可以分享一些代码。

好的,如果您在flash中执行此操作,则需要3件事:Flash(duh),PHP文件和SQL服务器(我有一个MYSQL服务器)。

如何工作是flash将加载php,php会做的事情(比如对数据库进行更改)并将其结果吐回flash。

假设我们想从数据库中获取所有用户名。

<强>数据库

表名称称为“玩家”,其中一列名为“u_id”

<强>闪存

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

现在可能不需要,但我尝试确保PHP文件和数据库位于同一主机上,以便我可以将“localhost”作为主机名

<?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;
?>

好的,去玩吧,它应该让你走上正确的道路。

答案 1 :(得分:1)

我认为最好的方法是维护一个在线数据库,并定期更新每个注册用户的最新信息。因此,不是在本地存储所有内容,而是可以将其存储在远程服务器上,并在需要时发送给用户。因此,只要用户拥有自己为应用程序创建的帐户,就不会丢失任何数据。