概述
继续上周未完成的工作,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。
最后
以上就是踏实野狼为你收集整理的本周任务(安卓上调用gsoap服务器——使用的是ksoap, 数据库的C语言调用)的全部内容,希望文章能够帮你解决本周任务(安卓上调用gsoap服务器——使用的是ksoap, 数据库的C语言调用)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复