本周任务(安卓上调用gsoap服务器——使用的是ksoap, 数据库的C语言调用)

来源:互联网 发布:喵姐捏脸数据 编辑:程序博客网 时间:2024/05/16 04:04

继续上周未完成的工作,1:后台程序的设计,不使用共享内存,改用数据库来实现。2:WEB的客户端的设计——安卓上的基于ksoap的开发,调用gsoap写的service;

针对2,在网上找了很多例子,终于发现一篇用很大帮助的http://www.eoeandroid.com/thread-312322-1-1.html,根据这篇,我照着做出现了些问题,现记录如下:

1.socket failed:EACCES(Permission denied)——解决:http://stackoverflow.com/questions/11273197/socket-failed-eacces-permission-denied  

2.HTTP request failed,HTTP status:400——解决:http://stackoverflow.com/questions/15825943/using-soap-web-services-with-android-4-2

3.HTTP request failed,HTTP status:500——网上搜了一下,出现这个原因有许多种,针对ksoap来说,是版本问题,原来用的是ksoap3.0.0,后来参考这个http://bbs.csdn.net/topics/390455175?page=1#post-395438202,修改了ksoap的版本为2.5.2,解决了这个问题

3.进行上述操作后,服务器端出现这个错误:"Method 'n0:GetSensorPM' not implemented: method name or namespace not recognized"
Detail: [no detail    GetSensorPM是我服务器端的接口函数,根据http://www.eoeandroid.com/thread-312322-1-1.html,应该是我的gsoap没有定义版本号导致的

解决——修改gsoap服务器的头文件://gsoap ns service namespace: http://192.168.1.232:9000/SmsWBS?wsdl  改为 //gsoap ns service namespace: urn:SmsWBS,安卓端做相应修改String nameSpace ="http://192.168.1.232:9000/SmsWBS?wsdl"; 改为String nameSpace ="urn:SmsWBS";

4.仍然有错,和服务器返回的参数类型有关,本人对安卓不是很了解,直接删除了//SoapObject detail=(SoapObject)((SoapObject)result).getProperty("GetSensorPMResponse");

这一句,最终可以连接服务器了。

5.rpc.addProperty("contolPm",value);值不能传给服务器,原来第一个参数需要和服务器端的参数名一致

后面的任务就是创建多线程,动态获取服务器的值,这个是案桌上的后续开发,交给别人了……

关于上周的封装类:封装原因——现在的程序时C的,要调用C++中的类中成员,很想用extern C来解决,但是我的成员中有用到模板(T),所以用了编译动态库这个简单的方法;封装的源文件——getConfig.cpp和getConfig.h;按照网上的方法,新建两个文件:pack_getcon.cpp和pack_getcon.h,这两个文件用来调用C++中的类成员,即对外的接口,这些接口用extern C来声明


4个文件准备好后,用指令来生成库:gcc getConfig.cpp pack_getCon.cpp -fPIC -shared -o libgetconfig.so,指令解释:-f后面跟一些编译选项PIC是其中一种,

表示生成位置无关代码(Position Independent Code),shared表示库共享
如果想用makefile来生成库可以参考这篇http://blog.csdn.net/zy799894671/article/details/7822505。

0 0
原创粉丝点击