折れ線グラフを必要とする Android アプリを作成しているため、サーバーからの (x,y) 座標が必要です。
Heroku で Ruby on Rails を使用してバックエンドを構築しています (ただし、Google AppEngine も検討しています)。
何百もの (x,y) 座標をネットワーク経由で (JSON でエンコードされていますか?) Android デバイスに送信する最良の方法は何ですか?
折れ線グラフを必要とする Android アプリを作成しているため、サーバーからの (x,y) 座標が必要です。
Heroku で Ruby on Rails を使用してバックエンドを構築しています (ただし、Google AppEngine も検討しています)。
何百もの (x,y) 座標をネットワーク経由で (JSON でエンコードされていますか?) Android デバイスに送信する最良の方法は何ですか?
帯域幅が非常に心配な場合は、座標をバイナリ形式にパックします。たとえば、(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]]
折れ線グラフを生成しているので、Google グラフ サービスの単純な拡張テキスト エンコーディングからインスピレーションを得たいと思うかもしれません。主なポイントは、実際の値を送信する必要がないということです。それらの相対的な値と制限だけです。
おそらく最良の方法は、JSON
またはでエンコードすることXML
です。
私は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 を解析する必要なく、プレーン テキストで送信できます。