android 访问webservice问题

来源:互联网 发布:微信跳转淘宝方法 编辑:程序博客网 时间:2024/04/24 09:31
刚开始自学Android,很多不懂得的地方。这个问题一直找不到原因:
在网上查到资料Android连接远程数据库要用WebService,用koap2获取WebService的数据。
我这里是做一个登陆的简单测试:
我用Eclipse新建了Dynamic Web Project项目:webTest,写好相关代码,连接数据库测试成功。之后在IPersonImp的类的文件名上点击右键,选择”Web Services"->“Create Web Service”自动创建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 String targetNameSpace = "http://service.main";
       
    // WSDL文档中的URL   
    private static final String WSDL = "http://localhost:8181/webTest/services/IPersonImp"
       
    //需要调用的方法名(获得Myervices中的login方法)   
    private static final String login="login";  
       
    public String login(String uname, String pwd){
        String reutrnResult = null;
        SoapObject request =new SoapObject(targetNameSpace,login);
         
        request.addProperty("uname", uname);
        request.addProperty("pwd", pwd);
         
        Log.i("mylog""request---" + request);
         
        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(  
                SoapEnvelope.VER11); 
         
        envelope.dotNet = false
        envelope.setOutputSoapObject(request); 
        HttpTransportSE httpTranstation = new HttpTransportSE(WSDL);
        try {  
            Log.i("mylog""info---" + httpTranstation);//日志打印到这里,就转入下面catch (IOException e)部分
            httpTranstation.call(targetNameSpace+login, envelope);  
            Log.i("mylog""info");
            if(envelope.getResponse() != null){
                SoapObject soapObject = (SoapObject) envelope.getResponse(); 
                Log.i("mylog""用户名--------"+soapObject.getProperty("name"));
                Log.i("mylog""密码--------"+soapObject.getProperty("pwd"));
                reutrnResult = "ok";
            }
         
        catch (IOException e) {  
            Log.e("mylog""error------1111");
            e.printStackTrace();  
            reutrnResult = "连接WSDL失败--1";//运行时android界面返回这个结果
        catch (XmlPullParserException e) {  
            Log.e("mylog""error------2222");
            reutrnResult = "连接WSDL失败--2";
            e.printStackTrace();  
        
        return reutrnResult;
    }
     
}  


Logcat错误信息:

第一句系统错误信息是连接失败:java.net.ConnectException:failed to connect to localhost/127.0.0.1 (port 8181): connect failed: ECONNREFUSED (Connection refused)
android界面:

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


另外还有一个问题(第二个问题,与第一个问题无关
webTest工程里面的IPersonImp类,当它里面有getCompanyList方法(返回一个集合)时,点击右键,选择”Web Services"->“Create Web Service”自动创建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 {
    PersonDAO comdao=new PersonDAO();
    //得到所有用户列表
    public List<Person> getCompanyList() {
        List<Person> list=new ArrayList<Person>();
        try {
            list=comdao.getCompanyList();
        catch (SQLException e) {
            e.printStackTrace();
            list=null;
        }
        return list;
    }
     
    public String login(String uname, String pwd) {
        // TODO Auto-generated method stub
         
        Person com = new Person();
        com = comdao.login(uname, pwd);
        String result = "fail";
        if(com != null){
            result = "success";
        }
         
        return result;
    }
}

警告截图:
0 0
原创粉丝点击