我正在编写一个应用程序,用于从我的Android手机获取传感器数据(GPS位置,加速度计,方向),并通过UDP将数据发送到服务器(顺便说一句,我计划使用Python)。
现在,我已经设法获取传感器数据并显示它们,但有点想办法将各种传感器数据组合到数据包中,并通过UDP发送数据包。我不知道的是如何以服务器仍然可以识别的方式“合并”数据,例如,它来自加速器,或者它是GPS坐标等。
有什么建议吗?
答案 0 :(得分:1)
JSON很好,或者您可以使用Jython来利用Java的序列化库。这样做的好处是你不必做任何工作就可以将类转换为可序列化的格式,只需实现serializable并添加serialVersionUID。
从Jython tips复制:
9序列化
使用标准Python pickle和cPickle模块无法序列化Java对象。 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继承的动态加载的代理类。
答案 1 :(得分:0)
如果您在服务器端使用Python,则可以将值包装到JSON字符串中 { “传感器”:有些数据, “gps”:somedata }
(因为很容易使用 json.loads 将JSON对象反序列化为字典)
然后将此字符串放入UDP数据包
要创建JSON字符串,您可以使用这些类http://developer.android.com/reference/org/json/package-summary.html