2012-04-13 151 views
0

我正在编写一个应用程序,以从我的Android手机(GPS位置,加速度计,方向)获取传感器数据,并通过UDP将数据发送到服务器(我计划使用Python,顺便一提)。现在,我已经设法获取传感器数据并显示它们,但是我们仍然想方设法将各种传感器数据组合到一个数据包上,然后通过UDP发送数据包。我不知道的是如何“合并”数据,使得数据仍然可以被服务器识别,例如,它来自加速器,或者它是GPS坐标等。通过UDP套接字发送android传感器数据

有什么建议吗?

回答

0

如果您在服务器端使用Python可以包你的值到JSON字符串如 { “传感器”:somedata, “GPS”:somedata }

(因为它很容易反序列化使用json.loads

然后JSON对象字典把这个字符串UDP数据包

要创建JSON字符串,你可以使用这些类http://developer.android.com/reference/org/json/package-summary.html

+0

嗨,谢谢!你能指点我一个很好的Android JSON教程吗?我自己google搜索,但似乎无法为初学者找到一个很好的分步指南。再次感谢! – herrfz 2012-04-13 21:10:35

+0

这很简单,例如http://www.vogella.com/articles/AndroidJSON/article.html#write – marwinXXII 2012-04-13 21:20:09

+0

很酷,非常感谢! – herrfz 2012-04-13 21:31:23

1

JSON很好,或者您可以使用Jython让您利用Java的序列化库。这样做的好处是你不需要做任何工作就可以将你的类转换为一个可序列化的格式,字面上只是实现了serializable并添加了一个serialVersionUID。

Jython tips复制:

9序列化

Java对象不能使用标准的Python泡菜和cPickle的模块被序列化。 Java和Jython对象都可以使用普通的Java序列化进行序列化。但是,反序列化可以正常使用的java.io.ObjectInputStream中的类Jython的对象时,必须使用特定的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继承的动态加载的代理类。