2012-04-13 2 views
0

Я пишу приложение, чтобы получить данные датчиков с моего телефона Android (положение GPS, акселерометр, ориентация) и отправить данные через UDP на сервер (я планирую использовать Python для этого, Кстати).Отправить данные датчика андроидов через гнездо UDP

Теперь я дошел до получения данных датчиков и их отображения, но как бы застрял в определении способа объединения различных данных датчика в пакет и отправки пакета по UDP. Я не знаю, как «объединить» данные таким образом, что они все еще могут быть идентифицированы сервером, например. что он исходит от ускорителя или что это координата GPS и т. д.

Любые предложения?

ответ

0

Если вы используете Python на стороне сервера, вы можете упаковать вы значения в JSON строки, как { «датчик»: somedata, «GPS»: somedata }

(Потому что его довольно легко десериализации JSON объект в словарь, используя json.loads)

, а затем положить эту строку в пакет UDP

для создания JSON строку, которую вы можете использовать эти классы http://developer.android.com/reference/org/json/package-summary.html

+0

Привет, спасибо! Не могли бы вы указать мне хороший учебник для Android JSON? Я сам искал ее, но, похоже, не нашел хорошего пошагового руководства для новичков. Еще раз спасибо! – herrfz

+0

довольно просто, например http://www.vogella.com/articles/AndroidJSON/article.html#write – marwinXXII

+0

классный, спасибо большое! – herrfz

1

JSON хорош, или вы можете использовать Jython, чтобы позволить вам использовать библиотеки сериализации Java. Преимущество этого заключается в том, что вам не нужно выполнять какую-либо работу по преобразованию ваших классов в сериализуемый формат, буквально просто реализуйте сериализуемые и добавляйте serialVersionUID.

Скопирован из Jython tips:

9 Сериализации

Java объекты не может быть сериализованы с помощью стандартного Python маринованной и 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 испытывает трудности с поиском и воссозданием динамически загруженных прокси-классов, используемых для наследования Java Jython.

Смежные вопросы