我正在編寫一個應用程序,以從我的Android手機(GPS位置,加速度計,方向)獲取傳感器數據,並通過UDP將數據發送到服務器(我計劃使用Python,順便一提)。現在,我已經設法獲取傳感器數據並顯示它們,但是我們仍然想方設法將各種傳感器數據組合到一個數據包上,然後通過UDP發送數據包。我不知道的是如何「合併」數據,使得數據仍然可以被服務器識別,例如,它來自加速器,或者它是GPS座標等。通過UDP套接字發送android傳感器數據
有什麼建議嗎?
我正在編寫一個應用程序,以從我的Android手機(GPS位置,加速度計,方向)獲取傳感器數據,並通過UDP將數據發送到服務器(我計劃使用Python,順便一提)。現在,我已經設法獲取傳感器數據並顯示它們,但是我們仍然想方設法將各種傳感器數據組合到一個數據包上,然後通過UDP發送數據包。我不知道的是如何「合併」數據,使得數據仍然可以被服務器識別,例如,它來自加速器,或者它是GPS座標等。通過UDP套接字發送android傳感器數據
有什麼建議嗎?
如果您在服務器端使用Python可以包你的值到JSON字符串如 { 「傳感器」:somedata, 「GPS」:somedata }
(因爲它很容易反序列化使用json.loads)
然後JSON對象字典把這個字符串UDP數據包
要創建JSON字符串,你可以使用這些類http://developer.android.com/reference/org/json/package-summary.html
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繼承的動態加載的代理類。
嗨,謝謝!你能指點我一個很好的Android JSON教程嗎?我自己google搜索,但似乎無法爲初學者找到一個很好的分步指南。再次感謝! – herrfz 2012-04-13 21:10:35
這很簡單,例如http://www.vogella.com/articles/AndroidJSON/article.html#write – marwinXXII 2012-04-13 21:20:09
很酷,非常感謝! – herrfz 2012-04-13 21:31:23