#android #view #client #send
#Android #Вид #клиент #Отправить
Вопрос:
Я хочу отправить (текстовый) элемент представления из серверного приложения (= ‘normal’, не для Android Java) в приложение Android на телефоне и отобразить его там. Создаем его таким образом на сервере…
TextView tv=new TextView(Client.myClient);
… выдает мне эту ошибку:
Exception in thread "main" java.lang.RuntimeException: Stub!
myClient
определяется следующим образом в Client
:
public static Client myClient;
.
В onCreate()
на Client
я написал myClient=this;
.
( Server
имеет доступ ко всем Client
классам, так что это не проблема.)
Что я делаю не так? Могу ли я, возможно, создать TextView с другим контекстом, отличным от контекста клиента, отправить его, а затем отобразить на клиенте? (Позже я захочу отправлять произвольные представления, вот почему я отправляю не только строку TextView.) Заранее большое спасибо!
Комментарии:
1. Вы должны отправлять только текстовое значение
String
с сервера и создаватьTextView
на устройстве Android. Вы делаете странную вещь2. Рассматривая только эту проблему, вы, безусловно, правы, но я хотел бы иметь возможность отправлять на телефон все мыслимые пользовательские интерфейсы. Использование TextView — это всего лишь простой пример.
Ответ №1:
Не уверен, что вы можете это сделать: насколько я могу судить Context
, он не сериализуем или иным образом не передается. Возможно, вам удастся разработать удобный язык описания (возможно, перенести полный XML и повторно обработать его на клиенте?) но не уверен, что вы можете сделать то, что вы описали выше, из коробки.
Комментарии:
1. Спасибо за ваш быстрый ответ! Контекст не сериализуем, уже пробовал это. Хорошо, я посмотрю, как передать XML-файл — или вы сразу знаете, как это сделать?
2. Вы просто создаете XML точно так же, как для макета, и используете LayoutInflater, чтобы превратить его в представление.
3. Потратил довольно много времени, пытаясь заставить это работать. Теперь я могу превратить XML-файл в представление, проблема в том, откуда взять этот XML-файл. Поскольку моя серверная программа — обычная Java, я не могу просто поместить туда XML-файл и получить к нему доступ через R.layout.*. Я уже пытался создать новый класс Android, затем получить доступ к одному из его XML-файлов через R.layout.* и превратить его в представление, а затем заставить сервер принять это, но я продолжаю получать эту ошибку ‘stub’.
4. Ах, Android преобразует XML-файлы в проекте в другой формат во время компиляции: необработанные XML-байты — это не то, что используется при раздувании представления. Вам нужно перепрыгнуть через специальные обручи, чтобы сгенерировать представление из файла с XML в нем, и я не уверен, что это за обручи.
5. Пытался решить это грязным способом, раздув XML-файл на клиенте, отправив его на сервер и обратно клиенту. (Думаю, что позже я мог бы отправить представление с другого эмулируемого клиента.) Теперь я получаю эту ошибку, однако:
writing aborted; java.io.NotSerializableException: android.widget.RelativeLayout
Означает ли это, что нет способа сериализовать RelativeLayout или какие-либо макеты?