Delphi XE8获取Web数据引发错误

时间:2016-08-18 09:11:36

标签: android delphi delphi-xe8

早上好,我有一个困惑的问题。我正在编写一个多设备应用程序来从Web服务器获取数据。我正在使用Rad Studio XE8。当应用程序运行时,它会引发这样的错误 调试器异常通知 Project SmartManager.apk引发了异常类Segmentation fault(11)。

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的错误吗?

0 个答案:

没有答案