1

Androidフォンからセンサーデータ(GPS位置、加速度計、方向)を取得し、UDP経由でサーバーにデータを送信するアプリを作成しています(ちなみに、Pythonを使用する予定です)。

これで、センサー データを取得して表示するまでは何とかなりましたが、さまざまなセンサー データをパケットに結合し、UDP 経由でパケットを送信する方法を見つけるのに苦労しました。私が知らないのは、サーバーが識別できる方法でデータを「マージ」する方法です。たとえば、データがアクセラレータからのものであるか、GPS 座標であるかなどです。

助言がありますか?

4

2 に答える 2

1

JSONは優れていますが、Jythonを使用してJavaのシリアル化ライブラリを利用することもできます。その利点は、クラスをシリアル化可能な形式に変換するために何もする必要がなく、文字通りシリアル化可能を実装してserialVersionUIDを追加するだけであるということです。

Jythonのヒントからコピー:

9シリアル化

Javaオブジェクトは、標準のPythonpickleおよびcPickleモジュールを使用してシリアル化することはできません。JavaオブジェクトとJythonオブジェクトはどちらも、通常のJavaシリアル化を使用してシリアル化できます。ただし、Jythonオブジェクトを逆シリアル化する場合、通常のjava.io.ObjectInputStreamクラスを使用できない場合は、次に示すように、Jython固有のorg.python.util.PythonObjectInputStreamを使用する必要があります。

import java.io as io
import org.python.util as util

class TestClass(io.Serializable):
    def __init_ _(self, value=0):
        self.value = value
        self.message = "Serialized"

    def toString(self):
        return "Message: %(message)s value: 
          is %(value)s" % self.__dict_ _

instance = TestClass(3)

outFile = io.FileOutputStream("test.ser")
outStream = io.ObjectOutputStream(outFile)
outStream.writeObject(instance)
outFile.close( )

inFile = io.FileInputStream("test.ser")
inStream = util.PythonObjectInputStream(inFile)

readInstance = inStream.readObject( )
print readInstance.toString( )
Message: Serialized value: is 3

PythonObjectInputStreamを使用しない場合、通常のJava ObjectInputStreamは、JythonのJava継承に使用される動的にロードされたプロキシクラスを見つけて再作成するのが難しいため、ランタイムエラーが発生します。

于 2013-03-05T00:34:17.497 に答える
1

サーバー側でPythonを使用している場合は、値を{"sensor":somedata、 "gps":somedata}のようなJSON文字列にパックできます。

( json.loadsを使用してJSONオブジェクトを辞書に逆シリアル化するのは非常に簡単だからです)

そして、この文字列をUDPパケットに入れます

JSON文字列を作成するには、これらのクラスを使用できますhttp://developer.android.com/reference/org/json/package-summary.html

于 2012-04-13T20:02:52.697 に答える