2012-04-13 3 views
0

Ich schreibe eine App, um Sensordaten von meinem Android-Handy (GPS-Position, Beschleunigungsmesser, Orientierung) zu erhalten und die Daten über UDP an einen Server zu senden (ich plane, Python dafür zu verwenden, Apropos).Senden von Android-Sensordaten über UDP-Socket

Jetzt habe ich es geschafft, die Sensordaten zu erhalten und anzuzeigen, aber irgendwie stecken geblieben darin, einen Weg zu finden, die verschiedenen Sensordaten zu einem Paket zu kombinieren und das Paket über UDP zu senden. Was ich nicht weiß, ist, wie man die Daten auf eine Weise "zusammenführt", dass sie immer noch vom Server identifiziert werden können, z.B. dass es vom Beschleuniger kommt, oder dass es eine GPS-Koordinate usw. ist.

Irgendwelche Vorschläge?

Antwort

0

Wenn Sie Python verwenden auf der Serverseite können Sie packen Sie Werte in JSON-String wie { „Sensor“: some, „GPS“: some }

(Weil seine recht einfach deserialisieren JSON-Objekt-Wörterbuch mit json.loads)

Und dann diese Zeichenfolge an UDP-Paket setzen

um JSON-String erstellen Sie diese Klassen verwenden können http://developer.android.com/reference/org/json/package-summary.html

+0

Hallo, danke! Könntest du mich bitte auf ein gutes Android JSON Tutorial hinweisen? Ich habe es selbst gegoogelt, finde aber keine nette Schritt-für-Schritt Anleitung für Anfänger. Danke noch einmal! – herrfz

+0

ist es ziemlich einfach, zum Beispiel http://www.vogella.com/articles/AndroidJSON/article.html#write – marwinXXII

+0

cool, vielen Dank! – herrfz

1

JSON ist gut, oder Sie könnten Jython verwenden, um die Java-Serialisierungsbibliotheken zu nutzen. Der Vorteil davon ist, dass Sie keine Arbeit machen müssen, um Ihre Klassen in ein serialisierbares Format zu konvertieren, einfach serialisierbar zu implementieren und eine serialVersionUID hinzuzufügen.

Kopiert von Jython tips:

9 Serialisierung

Java-Objekte können nicht-Module mit den Pickles und cPickle Standard Python serialisiert werden. Sowohl Java als auch Jython-Objekte können mit normaler Java-Serialisierung serialisiert werden. Wenn jedoch ein Jython Objekt Deserialisieren Sie nicht die normale java.io.ObjectInputStream Klasse verwenden können, müssen Sie den Jython spezifische org.python.util.PythonObjectInputStream verwenden, wie hier gezeigt:

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 

Wenn Sie nicht verwenden PythonObjectInputStream, erhalten Sie einen Laufzeitfehler, da das gewöhnliche Java ObjectInputStream Probleme hat, die dynamisch geladenen Proxy-Klassen, die für Jythons Java-Vererbung verwendet werden, zu finden und neu zu erstellen.