刚开始自学Android,很多不懂得的地方。这个问题一直找不到原因:
在网上查到资料Android连接远程数据库要用WebService,用koap2获取WebService的数据。
我这里是做一个登陆的简单测试:
我用Eclipse新建了DynamicWebProject项目:webTest,写好相关代码,连接数据库测试成功。之后在IPersonImp的类的文件名上点击右键,选择”WebServices"->“CreateWebService”自动创建webservice:

将工程部署到Tomcat下,启动Tomcat,在浏览器中输入网址,能够找到wsdl:

浏览器测试登陆效果(密码错误,返回结果为fail):

问题
新建一个Android项目,MyWebServiceHelper类代码:
Java code ?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 import java.io.IOException; import org.ksoap2.SoapEnvelope; import org.ksoap2.serialization.SoapObject; import org.ksoap2.serialization.SoapSerializationEnvelope; import org.ksoap2.transport.HttpTransportSE; import org.xmlpull.v1.XmlPullParserException; import android.util.Log; public class MyWebServiceHelper{ //WSDL文档中的命名空间 private static final StringtargetNameSpace= "http://service.main" ; //WSDL文档中的URL private static final StringWSDL= "http://localhost:8181/webTest/services/IPersonImp" ; //需要调用的方法名(获得Myervices中的login方法) private static final Stringlogin= "login" ; public Stringlogin(Stringuname,Stringpwd){ StringreutrnResult= null ; SoapObjectrequest= new SoapObject(targetNameSpace,login); request.addProperty( "uname" ,uname); request.addProperty( "pwd" ,pwd); Log.i( "mylog" , "request---" +request); SoapSerializationEnvelopeenvelope= new SoapSerializationEnvelope( SoapEnvelope.VER11); envelope.dotNet= false ; envelope.setOutputSoapObject(request); HttpTransportSEhttpTranstation= new HttpTransportSE(WSDL); try { Log.i( "mylog" , "info---" +httpTranstation); //日志打印到这里,就转入下面catch(IOExceptione)部分 httpTranstation.call(targetNameSpace+login,envelope); Log.i( "mylog" , "info" ); if (envelope.getResponse()!= null ){ SoapObjectsoapObject=(SoapObject)envelope.getResponse(); Log.i( "mylog" , "用户名--------" +soapObject.getProperty( "name" )); Log.i( "mylog" , "密码--------" +soapObject.getProperty( "pwd" )); reutrnResult= "ok" ; } } catch (IOExceptione){ Log.e( "mylog" , "error------1111" ); e.printStackTrace(); reutrnResult= "连接WSDL失败--1" ; //运行时android界面返回这个结果 } catch (XmlPullParserExceptione){ Log.e( "mylog" , "error------2222" ); reutrnResult= "连接WSDL失败--2" ; e.printStackTrace(); } return reutrnResult; } }


Logcat错误信息:

第一句系统错误信息是连接失败:java.net.ConnectException:failedtoconnecttolocalhost/127.0.0.1(port8181):connectfailed:ECONNREFUSED(Connectionrefused)
android界面:

这时候Tomcat是启动状态,我刷新http://localhost:8181/webTest/services/IPersonImp?wsdl页面能访问到wsdl,可是为什么Android连接会失败呢?


另外还有一个问题( 第二个问题,与第一个问题无关
webTest工程里面的IPersonImp类,当它里面有getCompanyList方法(返回一个集合)时,点击右键,选择”WebServices"->“CreateWebService”自动创建webservice会出现警告,是什么原因啊?如果只有login方法(返回String)就没关系,反正就不能返回集合
IPersonImp代码:
Java code ?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 public class IPersonImp implements IPerson{ PersonDAOcomdao= new PersonDAO(); //得到所有用户列表 public List<Person>getCompanyList(){ List<Person>list= new ArrayList<Person>(); try { list=comdao.getCompanyList(); } catch (SQLExceptione){ e.printStackTrace(); list= null ; } return list; } public Stringlogin(Stringuname,Stringpwd){ //TODOAuto-generatedmethodstub Personcom= new Person(); com=comdao.login(uname,pwd); Stringresult= "fail" ; if (com!= null ){ result= "success" ; } return result; } }

警告截图:
更多0 分享到:

更多相关文章

  1. Android高频面试专题 - 基础篇(一)Activity
  2. 常用控件的使用方法(参考书籍'第一行代码')
  3. Android动态化方案
  4. android通过Location API显示地址信息的实现方法
  5. [置顶] React Native Android(安卓)Cookie Problem
  6. Android中在一个应用中去启动另外一个应用
  7. Android(安卓)Wifi方法大全
  8. Android-webview和js脚本语言交互的时候怎么获取js方法的返回值
  9. android播放音乐的三种方法实现

随机推荐

  1. android 加法程序
  2. Android自动化测试
  3. Android(安卓)简单的从本机获取相机功能
  4. PopupWindow的使用
  5. [Android]BroadcastQueue如何分发广播(四)
  6. android调用系统邮件组件(intent匹配的流
  7. Android多分辨率适配
  8. Android文件操作
  9. android中ListView数据刷新时的同步
  10. android 改变bitmap颜色