1.I创建WSDL导入程序,WSDL文件位置为“http://60.12.81.154/MobileQueryService/services/MobileQueryDaoImpl?wsdl” 2.在应用程序中添加一个按钮和两个编辑组件。按钮Onclick事件是完成用户登录,代码为:
**
procedure TFrmUserLogin.LoginByWebService;
var
ret: string;
JSONObject: TJSONObject;
begin
try
ret := GetMobileQueryDaoImplPortType.Sys_Return_UserInfo(eUserNo.Text, ePwd.Text);
if ret <> '' then
begin
JSONObject := TJSONObject.ParseJSONValue(TEncoding.UTF8.GetBytes(ret), 0) as TJSONObject;
...
end;
except
showmessage('login failure!')
end;
end;
**
当APP运行到'ret := GetMobileQueryDaoImplPortType.Sys_Return_UserInfo(eUserNo.Text, ePwd.Text);
'时,会引发错误“class Segmentation fault(11)”。
3.网页服务器由Java编写,在Tomcat7上运行,当应用程序出现错误时,我发现服务器正在运行Normal.I打印结果,它是正确的。
4.这个应用程序在win32或win64平台上正常运行,但是当我切换到android时,会出现错误。 5.我测试了2部手机。一部是华为P6,Android版4.2。其他是华为P9,Android版本是6.0。应用程序在P6上运行正常,但在P9上引发错误。 6.昨天,我尝试了另一种从wbeserver获取数据的方法使用httpclient, 像这样的代码:
**
procedure TFrmUserLogin.LoginByHttp;
var HttpClient:TIDHttp;
ParamList:TStringList;
url:String;
retResponse:TStringStream;
i: Integer;
rt,ret: string;
begin
try
HttpClient:=TIdHTTP.Create(Application.Owner);
retResponse:=TStringStream.Create;
url:='http://60.12.81.154/MobileQueryService/servlet/UserLoginAction' ;
ParamList:=TStringList.Create;
ParamList.Add('userno='+eUserNo.Text);
ParamList.Add('password='+ePwd.Text);
HttpClient.Post(url,ParamList,retResponse);
...
end;
**
错误相同!!!
然后我替换'HttpClient.Post(url,ParamList,retResponse);
'
同
'HttpClient.Get(url+'?userno='+eUserNo.Text+'&password='+ePwd.Text,retResponse);
'
它按预期工作。
我不知道为什么,任何人都可以帮助我吗?
我调试了问题,它停在“System.pas”文件中的以下代码行:
dlclose(手柄);
我发现当句柄为0时,引发了错误。我在XE10中检查了文件,使用dlclose的所有代码都会检查句柄的天气是否为0,如下所示:
如果句柄&lt;&gt; 0则dlclose(句柄);
可以说这是XE8的错误吗?