1

Webサービスに接続して、アプリのマスターデータをダウンロードします。したがって、1回のダウンロードで、アプリは異なるインデックスを使用してWebサービスを何度も呼び出す必要があります。

この間、HttpTransportSE.callメソッドは一部のインデックスに対して NullPointerExceptionを返すことがありますが、それ以外の場合は正常に機能します。

私の呼び出し関数は:

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-0614
:01:14.136:W / System.err(1504):java.lang.NullPointerException

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

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

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

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

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

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

4

2 に答える 2

1

私はあなたのようなプロパティを追加することはありません

request.addProperty("data", "value");

これを試して:

PropertyInfo property = new PropertyInfo();
{
    property.name = "data";
    property.setNamespace(NAMESPACE);
    property.type = PropertyInfo.STRING_CLASS;
    property.setValue("value"); 
}
request.addProperty(property);

また、使用してみてください

SoapEnvelope.VER11 

VER12の代わりに

生を追加します

envelope.implicitTypes = true;

そして、AndroidMAnifest.xmlにこの権限を追加しましたか?

<uses-permission android:name="android.permission.INTERNET"></uses-permission>
于 2013-02-06T07:28:23.277 に答える
1

調査を行った結果、サーバーがビジー状態のときに発生し、サーバーがリクエストを処理するまでに、HttpTransportSE呼び出しメソッドがタイムアウトになることがわかりました。20秒のデフォルトのタイムアウト値。だから、これを克服するために、:

  • 適切なタイムアウト値を設定する

    HttpTransportSE http = new HttpTransportSE(URL、30000);

  • http.callメソッドをwhileループで囲み、有効な応答が得られるまで「N」回まで再試行します。

于 2013-09-04T05:41:08.167 に答える