3

折れ線グラフを必要とする Android アプリを作成しているため、サーバーからの (x,y) 座標が必要です。

Heroku で Ruby on Rails を使用してバックエンドを構築しています (ただし、Google AppEngine も検討しています)。

何百もの (x,y) 座標をネットワーク経由で (JSON でエンコードされていますか?) Android デバイスに送信する最良の方法は何ですか?

4

4 に答える 4

6

帯域幅が非常に心配な場合は、座標をバイナリ形式にパックします。たとえば、(x,y) 座標の 2 次元グリッドが 32 ビット整数であるとします。ルビーの使用:

points = [[107897,598654], [876432,30001], [15,754689]]
# => [[107897, 598654], [876432, 30001], [15, 754689]]

# json size
points.to_json.length
# => 44

# make a byte stream of points
data = points.flatten.pack("V*")
# => "y\xA5\x01\x00~\"\t\x00\x90_\r\x001u\x00\x00\x0F\x00\x00\x00\x01\x84\v\x00"

# binary size
data.length
# => 24

# read a byte stream to points
points = data.unpack("V*").each_slice(2).to_a
# => [[107897, 598654], [876432, 30001], [15, 754689]] 
于 2012-04-25T00:31:53.070 に答える
1

折れ線グラフを生成しているので、Google グラフ サービスの単純な拡張テキスト エンコーディングからインスピレーションを得たいと思うかもしれません。主なポイントは、実際の値を送信する必要がないということです。それらの相対的な値と制限だけです。

于 2012-04-26T05:57:14.597 に答える
0

おそらく最良の方法は、JSONまたはでエンコードすることXMLです。

于 2012-04-24T23:44:30.983 に答える
0

私はRubyの経験がありませんが、改行で区切られた座標をXMLで順番に送信することができます(おそらく、次の行に沿ったものです:<coordinate use='errorbar'>1,2</coordinate>各座標[あなたのルビースクリプトで])、改行で区切られ、結果をアンドロイド使用:

public static String[] download(String web_url) throws IOException{
    URL website = new URL(web_url);
    BufferedReader in = new BufferedReader(
              new InputStreamReader(
              website.openStream()));
    String input;
    ArrayList<String> stringList = new ArrayList<String>();
    while ((input = in.readLine()) != null) {
        stringList.add(input);
    }
    String[] itemArray = new String[stringList.size()];
    String[] returnedArray = stringList.toArray(itemArray);
    return returnedArray;
}
// Of course, call this function with web_url as the URL to your script

これにより、各行が配列のエントリとして XML 出力を取得し、XML を解析するだけで済みます。余分なデータが必要ないことが確実な場合は、XML を解析する必要なく、プレーン テキストで送信できます。

于 2012-04-24T23:56:42.290 に答える