首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HttpTransportSE.call方法经常返回NullPointerException

HttpTransportSE.call方法经常返回NullPointerException
EN

Stack Overflow用户
提问于 2013-02-06 07:02:13
回答 2查看 8.3K关注 0票数 1

我连接到一个webservice来下载我的应用程序的主数据。因此,在一次下载中,该应用程序需要使用不同的索引将webservice称为no。

在此期间,HttpTransportSE.call方法有时会为某些索引返回NullPointerException,否则它会正常工作。

我的呼叫功能是:

代码语言:javascript
复制
public String SoapAction(String[] values){

String[] data = new String[] { "CompanyID", "Username", "Password", "indexNo", "DataString","lDate" };

    SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);

for(int i = 0; i < data.length; i++){
  PropertyInfo property = new PropertyInfo();
  property.setName(data[i]);
  property.setNamespace(NAMESPACE);
  property.setType(PropertyInfo.STRING_CLASS);
  property.setValue(values[i]); 

  request.addProperty(property);
}

SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.implicitTypes = true;
envelope.setOutputSoapObject(request);

try{
  HttpTransportSE http = new HttpTransportSE(URL);
  http.debug = true;
  System.setProperty("http.keepAlive", "false");

  http.call(SOAP_ACTION, envelope);
}catch (IOException e1) {
  e1.printStackTrace();         
  return "serverError";
} catch (XmlPullParserException e1) {
  e1.printStackTrace();
  return "serverError";     
} catch (Exception e) {
  e.printStackTrace();          
  return "serverError";
}

SoapPrimitive resultString = null;

try{
  resultString = (SoapPrimitive)envelope.getResponse();
}catch (SoapFault e) {
  e.printStackTrace();          
  return "serverError";
}

if(resultString != null){
  return resultString.toString();
} else {
  return "serverError";
}
}

我做了不少谷歌搜索,但找不到解决办法

下面是堆栈跟踪:

02-06 14:01:14.136: W/System.err(1504):java.lang.NullPointerException

02-06 14:01:14.136: W/System.err(1504):at org.ksoap2.transport.ServiceConnectionSE.getResponseProperties(ServiceConnectionSE.java:85)

02-06 14:01:14.136: W/System.err(1504):at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:167)

02-06 14:01:14.136: W/System.err(1504):at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:96)

02-06 14:29:50.026: W/System.err(1504):at com.c2info.engine.WebServiceConnection.SoapAction(WebServiceConnection.java:49)

02-06 14:29:50.026: W/System.err(1504):at com.c2info.engine.DownloadData.downloadTasks(DownloadData.java:800)

02-06 14:29:50.026: W/System.err(1504):at com.c2info.engine.DownloadData$3.run(DownloadData.java:187)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-04 05:41:08

在进行了一些研究之后,我发现当服务器繁忙时,当服务器处理您的请求时,HttpTransportSE调用方法就会超时。以20岁为单位的默认超时值。因此,为了克服这一问题,

  • 设置合适的超时值。 HttpTransportSE http =新HttpTransportSE(URL,30000);

  • 将http.call方法封装在till循环中,然后重试直到“N”不存在,直到得到有效的响应
票数 2
EN

Stack Overflow用户

发布于 2013-02-06 07:28:23

我从来不添加像你这样的属性

代码语言:javascript
复制
request.addProperty("data", "value");

试试这个:

代码语言:javascript
复制
PropertyInfo property = new PropertyInfo();
{
    property.name = "data";
    property.setNamespace(NAMESPACE);
    property.type = PropertyInfo.STRING_CLASS;
    property.setValue("value"); 
}
request.addProperty(property);

也试着用

代码语言:javascript
复制
SoapEnvelope.VER11 

而不是VER12

添加生料

代码语言:javascript
复制
envelope.implicitTypes = true;

您在AndroidMAnifest.xml中添加了这个权限吗?

代码语言:javascript
复制
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14723386

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档