刚开始自学Android,很多不懂得的地方。这个问题一直找不到原因:
在网上查到资料Android连接远程数据库要用WebService,用koap2获取WebService的数据。
我这里是做一个登陆的简单测试:
我用Eclipse新建了Dynamic Web Project项目:webTest,写好相关代码,连接数据库测试成功。之后在IPersonImp的类的文件名上点击右键,选择”Web Services"->“Create Web Service”自动创建webservice :
将工程部署到Tomcat下,启动Tomcat,在浏览器中输入网址,能够找到wsdl:
浏览器测试登陆效果(密码错误,返回结果为fail):
问题 :
新建一个Android项目,MyWebServiceHelper类代码:
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代码:
警告截图:
在网上查到资料Android连接远程数据库要用WebService,用koap2获取WebService的数据。
我这里是做一个登陆的简单测试:
我用Eclipse新建了Dynamic Web Project项目:webTest,写好相关代码,连接数据库测试成功。之后在IPersonImp的类的文件名上点击右键,选择”Web Services"->“Create Web Service”自动创建webservice :

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

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

问题 :
新建一个Android项目,MyWebServiceHelper类代码:
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代码:
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;
}
}
|
警告截图:
