Я работаю в приложении для Android с Eclipse, которое подключается к серверу OpenERP с использованием протокола XML-RPC. У меня вопрос как сделать логаут на сервер или если это не нужно.
Я пытался сделать это так же, как метод «вход», но он не работает. я ловлю
java.lang.ClassCastException (java.lang.String cannot be cast to java.lang.Integer)
в строке client.execute().
Вот полный стек:
07-17 10:18:42.271: E/Conector OpenERP(19595): Error while logging out
07-17 10:18:42.271: E/Conector OpenERP(19595): java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer
07-17 10:18:42.271: E/Conector OpenERP(19595): at org.apache.xmlrpc.parser.XmlRpcResponseParser.addResult(XmlRpcResponseParser.java:55)
07-17 10:18:42.271: E/Conector OpenERP(19595): at org.apache.xmlrpc.parser.RecursiveTypeParserImpl.endValueTag(RecursiveTypeParserImpl.java:71)
07-17 10:18:42.271: E/Conector OpenERP(19595): at org.apache.xmlrpc.parser.XmlRpcResponseParser.endElement(XmlRpcResponseParser.java:164)
07-17 10:18:42.271: E/Conector OpenERP(19595): at org.apache.harmony.xml.ExpatParser.endElement(ExpatParser.java:156)
07-17 10:18:42.271: E/Conector OpenERP(19595): at org.apache.harmony.xml.ExpatParser.appendBytes(Native Method)
07-17 10:18:42.271: E/Conector OpenERP(19595): at org.apache.harmony.xml.ExpatParser.parseFragment(ExpatParser.java:513)
07-17 10:18:42.271: E/Conector OpenERP(19595): at org.apache.harmony.xml.ExpatParser.parseDocument(ExpatParser.java:474)
07-17 10:18:42.271: E/Conector OpenERP(19595): at org.apache.harmony.xml.ExpatReader.parse(ExpatReader.java:316)
07-17 10:18:42.271: E/Conector OpenERP(19595): at org.apache.harmony.xml.ExpatReader.parse(ExpatReader.java:279)
07-17 10:18:42.271: E/Conector OpenERP(19595): at org.apache.xmlrpc.client.XmlRpcStreamTransport.readResponse(XmlRpcStreamTransport.java:172)
07-17 10:18:42.271: E/Conector OpenERP(19595): at org.apache.xmlrpc.client.XmlRpcStreamTransport.sendRequest(XmlRpcStreamTransport.java:149)
07-17 10:18:42.271: E/Conector OpenERP(19595): at org.apache.xmlrpc.client.XmlRpcHttpTransport.sendRequest(XmlRpcHttpTransport.java:95)
07-17 10:18:42.271: E/Conector OpenERP(19595): at org.apache.xmlrpc.client.XmlRpcSunHttpTransport.sendRequest(XmlRpcSunHttpTransport.java:39)
07-17 10:18:42.271: E/Conector OpenERP(19595): at org.apache.xmlrpc.client.XmlRpcClientWorker.execute(XmlRpcClientWorker.java:53)
07-17 10:18:42.271: E/Conector OpenERP(19595): at org.apache.xmlrpc.client.XmlRpcClient.execute(XmlRpcClient.java:166)
07-17 10:18:42.271: E/Conector OpenERP(19595): at org.apache.xmlrpc.client.XmlRpcClient.execute(XmlRpcClient.java:136)
07-17 10:18:42.271: E/Conector OpenERP(19595): at org.apache.xmlrpc.client.XmlRpcClient.execute(XmlRpcClient.java:125)
07-17 10:18:42.271: E/Conector OpenERP(19595): at com.example.nfcreader.JavaOpenerpConnector.disconnect(JavaOpenerpConnector.java:459)
07-17 10:18:42.271: E/Conector OpenERP(19595): at com.example.nfcreader.MainActivity$ReadDBTask.doInBackground(MainActivity.java:1198)
07-17 10:18:42.271: E/Conector OpenERP(19595): at com.example.nfcreader.MainActivity$ReadDBTask.doInBackground(MainActivity.java:1)
07-17 10:18:42.271: E/Conector OpenERP(19595): at android.os.AsyncTask$2.call(AsyncTask.java:287)
07-17 10:18:42.271: E/Conector OpenERP(19595): at java.util.concurrent.FutureTask.run(FutureTask.java:234)
07-17 10:18:42.271: E/Conector OpenERP(19595): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
07-17 10:18:42.271: E/Conector OpenERP(19595): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
07-17 10:18:42.271: E/Conector OpenERP(19595): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
07-17 10:18:42.271: E/Conector OpenERP(19595): at java.lang.Thread.run(Thread.java:841)
Я искал в Интернете, но ничего не нашел о том, как реализовать этот метод «выхода из системы». Я думаю, что проблема заключается в параметрах для отправки в методе client.execute().
Вот мой код:
public void disconnect() {
try{
XmlRpcClient client = new XmlRpcClient();
XmlRpcClientConfigImpl config = new XmlRpcClientConfigImpl();
config.setServerURL(new URL("http",host,port,"/xmlrpc/common"));
client.setConfig(config);
Object result = client.execute("logout", new Object[] {database,user,password});
}catch(MalformedURLException ex){
Log.e(TAG, "Wrong URL", ex);
}catch (XmlRpcException ex){
Log.e(TAG, "Error XML-RPC", ex);
}catch (Exception ex) {
Log.e(TAG, "Error while logging out", ex);
}
return;
}
Код для метода «вход» работает успешно, и он такой же, как и выше, просто заменяет слово «выход из системы» на «вход».
Спасибо за ваши предложения!
execute
выдает ошибку? Пожалуйста, опубликуйте полную трассировку стека и метод входа. - person Christian St.   schedule 15.07.2014execute
. Я рассмотрел свой вопрос и добавил полную трассировку стека. - person jelogar   schedule 17.07.2014logout
. Вы уверены, что вам нужно явно выполнить выход из системы, чтобы завершить сеанс? Откуда ваши примеры? - person Christian St.   schedule 17.07.2014