|
1С + Android | ☑ | ||
---|---|---|---|---|
0
a_alenkin
30.03.16
✎
11:33
|
Собственно, функционала мобильного приложения оказалось недостаточным для работы.
Поэтому решено написать своего клиента для обращения к существующему веб-сервису с помощью ksoap2-android-assembly-3.4.0-jar-with-dependencies.jar и так как в jave я не настолько силен - никак не могу вызвать элементарную функцию которая передает с мобильного клиента строку на сервер и ее же возвращает. Перерыл все поиски. Мой код: public class SoapConnection { private static final String NAMESPACE = "http://win-2008.auto.local"; private static String URL = "http://win-2008.auto.local/alfa_n/ws/auto/"; private static final String METHOD_NAME = "test"; private static final String SOAP_ACTION = "http://win-2008.auto.local/alfa_n/ws/auto/test"; SoapObject request; SoapSerializationEnvelope envelope; HttpTransportSE httpTransportSE; List<HeaderProperty> headerList; String result; public String TestConnection(String arg){ SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); request.addProperty("arg", arg); SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); envelope.setOutputSoapObject(request); HttpTransportSE httpTransportSE = new HttpTransportSE(URL); httpTransportSE.debug = true; List<HeaderProperty> headerList = new ArrayList<HeaderProperty>(); headerList.add(new HeaderProperty("Authorization", "Basic " + org.kobjects.base64.Base64.encode("Администратор:123аа".getBytes()))); try { httpTransportSE.call(SOAP_ACTION, envelope, headerList); } catch (Exception e) { e.printStackTrace(); return e.getLocalizedMessage(); } SoapObject Sresult = (SoapObject)envelope.bodyIn; result = Sresult.getProperty("result").toString(); return result; } } выдает мне ошибку: org.ksoap2.SoapFault cannot be cast to org.ksoap2.serialization.SoapObject Может кто поможет с проблемой или хотя бы носом тыкнет. работаю в Андроид Студио - отладку включить не могу - виртуальная машина не позволяет запустить виртуальный эмулятор |
|||
1
UnknownNick
30.03.16
✎
11:35
|
Сообщить() между строк неплохо помогает.
|
|||
2
UnknownNick
30.03.16
✎
11:36
|
типы объектов не совпадают вроде
|
|||
3
a_alenkin
30.03.16
✎
11:36
|
(1) Вызывается в отдельном процессе
|
|||
4
Nuobu
30.03.16
✎
11:38
|
(0) попробуй к своеиу классу добавить "implements Serializable"
https://www.google.com.ua/search?q=class+serializable+java&oq=класс+seriali&aqs=chrome.5.69i57j0l5.12448j0j7&client=ubuntu-browser&sourceid=chrome&es_sm=93&ie=UTF-8#q=serialization+java+android |
|||
5
1Cancer
30.03.16
✎
11:50
|
(0) ну там ошибка сериализации, судя по ошибке, посмотри от кого наследник и т.д. почему не сереализует, можно добавить свою серилку в ручную, убрать то, что не может сериализоваться, например потоки. они не сериализуемы.
|
|||
6
Draziw
30.03.16
✎
12:08
|
Ошибка то в какой строке ?
SoapObject Sresult = (SoapObject)envelope.bodyIn; тут ? |
|||
7
Draziw
30.03.16
✎
12:16
|
SoapFault mResult = envelope.bodyIn;
попробуй так, посмотри какие методы и свойства есть у mResult :) не надо переменные с большой буквы называть :) префикс "s"Result - для статик переменных. |
|||
8
a_alenkin
30.03.16
✎
13:00
|
теперь проблемы с авторизацией нашел 2 варианта:
1) request.addProperty("arg", arg); request.addProperty("username", username); request.addProperty("password", password); выдает 401 ошибку - т.е. авторизация 2) List<HeaderProperty> headerList = new ArrayList<HeaderProperty>(); headerList.add(new HeaderProperty("Authorization", "Basic " + org.kobjects.base64.Base64.encode("Администратор:123аа".getBytes()))); try { httpTransportSE.call(SOAP_ACTION, envelope, headerList); } catch (Exception e) { e.printStackTrace(); return e.getLocalizedMessage(); } if (envelope.bodyIn instanceof SoapFault) { final SoapFault sf = (SoapFault) envelope.bodyIn; result = sf.getMessage(); // result = sf.faultstring; } Как то ничего не возвращает |
|||
9
arsik
гуру
30.03.16
✎
13:16
|
"функционала мобильного приложения оказалось недостаточным для работы." - чего там может не хватать?
|
|||
10
zladenuw
30.03.16
✎
13:43
|
(9) хотят что то скрыть. или что бы не украли решение :)
|
|||
11
Masquerade
30.03.16
✎
13:43
|
(9)+
Тоже интересно. |
|||
12
Masquerade
30.03.16
✎
13:44
|
(10)
"функцию которая передает с мобильного клиента строку на сервер и ее же возвращает." Это? Ну... Тут шифровать надо серьезно. |
|||
13
UnknownNick
30.03.16
✎
13:45
|
(9) тормознутое десктопное гуано....устроит?
|
|||
14
Masquerade
30.03.16
✎
13:48
|
(13)
Не хватает тормозного десктопного гуана?? |
|||
15
zladenuw
30.03.16
✎
13:51
|
(12) Мда уж :)
|
|||
16
a_alenkin
30.03.16
✎
14:00
|
(9) передаются фото на сервер - а мобильное приложение не может нормально сфотографировать со вспышкой и автофокусом - и не только
|
|||
17
a_alenkin
30.03.16
✎
14:01
|
//Заголовки авторизации
PropertyInfo Auth = new PropertyInfo(); Auth.setName("Authorization"); Auth.setValue(buffer.toString());//"Basic " + org.kobjects.base64.Base64.encode("User:220757".getBytes())); request.addProperty(Auth); PropertyInfo p3 = new PropertyInfo(); p3.setName("arg"); p3.setValue("Соединение успешно".toString()); request.addProperty(p3); SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER12); envelope.setOutputSoapObject(request); попытался вот так вот сделать авторизацию - все равно ошибка 401 |
|||
18
zladenuw
30.03.16
✎
14:09
|
||||
19
MaXpaT
30.03.16
✎
14:11
|
(0) вечером если не забуду, до дома доберусь - пришлю кусок рабочего кода из Android-Studio
|
|||
20
Masquerade
30.03.16
✎
14:13
|
(16)
Мммм... Ты уверен?? |
|||
21
a_alenkin
30.03.16
✎
15:25
|
(18)
"Для удобства работы с веб-сервисом создадим класс HttpTransportBasicAuthSE, который будет работать подобно объекту WSОпределения в 1С - определять подключение к сервису с указанием пути к веб-сервису, имени пользователя, пароля и таймаутом подключения. Также в кллассе определен заголовок XML с указанием версии и кодировки. Данный класс я нашел на просторах интернета" а вот где бы найти этот класс(((( |
|||
22
arsik
гуру
31.03.16
✎
11:14
|
(16) Вообще то в 8.3.8 появился новый метод ЗапускПриложенияМобильногоУстройства. Он позволяет пользоваться штатным приложением для фото.
http://catalog.mista.ru/public/301851/ |
|||
23
arsik
гуру
31.03.16
✎
11:17
|
(22) Вру. Этот метод был и раньше.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |