我从andriod应用程序调用webservice,使用eclipse开发, 但是在打电话时会遇到异常 androidHttpTransport.call(SOAP_ACTION,envelope);
ex.getMessage()print" null"异常消息
在表明文件中我指定了
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
以下是完整代码
///////////////////
public class Yasir1Activity extends Activity {
TextView tv;
private final String NAMESPACE = "http://www.webserviceX.NET/";
private final String URL = "http://www.webservicex.net/ConvertWeight.asmx";
private final String SOAP_ACTION = "http://www.webserviceX.NET/ConvertWeight";
private final String METHOD_NAME = "ConvertWeight";
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tv=(TextView)findViewById(R.id.txt);
String msg="";
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
String weight = "3700";
String fromUnit = "Grams";
String toUnit = "Kilograms";
PropertyInfo weightProp =new PropertyInfo();
weightProp.setName("Weight");
weightProp.setValue(weight);
weightProp.setType(double.class);
request.addProperty(weightProp);
PropertyInfo fromProp =new PropertyInfo();
fromProp.setName("FromUnit");
fromProp.setValue(fromUnit);
fromProp.setType(String.class);
request.addProperty(fromProp);
PropertyInfo toProp =new PropertyInfo();
toProp.setName("ToUnit");
toProp.setValue(toUnit);
toProp.setType(String.class);
request.addProperty(toProp);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.setOutputSoapObject(request);
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
try
{
msg="before call";
androidHttpTransport.call(SOAP_ACTION, envelope); //throwing exception
msg+="call success";
SoapPrimitive response = (SoapPrimitive)envelope.getResponse();
//Log.i("myApp", response.toString());
//TextView tv = new TextView(this);
msg+=response.toString();
tv.setText(response.toString());//weight+" "+fromUnit+" equal "+response.toString()+ " "+toUnit);
}
catch(SocketException ex)
{
msg+="Error on soapPrimitiveData() " + ex.getMessage();
ex.printStackTrace();
}
catch (Exception e)
{
e.printStackTrace();
msg += "Exception " +e.getMessage(); //"Exception null" is printing
}
tv.setText( msg);
}
}
答案 0 :(得分:2)
我遇到了同样的问题。我得到一个null异常因为我在主线程中尝试。 Honeycomb SDK或更高版本的问题。 http://developer.android.com/reference/android/os/NetworkOnMainThreadException.html
解决方案,在新线程中运行该进程。
问候!
答案 1 :(得分:1)
你应该看到这个Double with ksoap2 on Android?在ksoap2中为你的soap请求添加Double属性。