转--Android中调用webservice的工具类
最近学习WebService,感觉利用这个借口开发网站的Android客户端方便及了,用到一个工具类,这里铭记一下。
public static final String WebServiceNamespace =""//地址 public static final String WebAddress = ""//地址
调用Webservice
public static Object callWebservice(String WebServiceUrl,String method,String[] params,Object[] values) { Object result = null; SoapObject rpc = new SoapObject(WebServiceTool.WebServiceNamespace,method); if(params!=null) { for(int i=0;i<params.length;i++) rpc.addProperty(params[i], values[i]); } SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); envelope.bodyOut = rpc; envelope.dotNet = true; envelope.setOutputSoapObject(rpc); HttpTransportSE ht = new HttpTransportSE(WebServiceUrl); ht.debug = true; String SOAP_ACTION = WebServiceTool.WebServiceNamespace + method; try { ht.call(SOAP_ACTION, envelope); result = envelope.getResponse(); } catch (IOException e) { e.printStackTrace(); } catch (XmlPullParserException e) { e.printStackTrace(); } return result; }
将WebService调用获得的对象转换成对象
public static Object toObject(Object obj,Class<?> cls) { if(obj==null) return null; if(obj instanceof String) return obj; Object result = null ; if(!(obj instanceof SoapObject)) return null; try { result = cls.newInstance() ; SoapObject so = (SoapObject)obj; System.out.println(so.getNamespace()); for(int i=0;i<so.getPropertyCount();i++) { PropertyInfo pinfo = new PropertyInfo(); so.getPropertyInfo(i, pinfo); System.out.println(pinfo.name); Object value = so.getProperty(i); if(value==null) continue; Object returnValue = value; Field field = null; try { field = cls.getField(pinfo.name); } catch(NoSuchFieldException e) { continue; } String name = field.getType().getName(); System.out.println(name); if(name.equals("int")) returnValue = Integer.valueOf(returnValue.toString()); else if(name.equals("short")) returnValue = Short.valueOf(value.toString()); else if(name.equals("long")) returnValue = Long.valueOf(value.toString()); else if(name.equals("byte")) returnValue = Byte.valueOf(value.toString()); else if(name.equals("float")) returnValue = Float.valueOf(value.toString()); else if(name.equals("double")) returnValue = Double.valueOf(value.toString()); else if(name.equals("BigInteger")) returnValue = new BigInteger(value.toString()); else if(name.equals("boolean")) returnValue = Boolean.valueOf(value.toString()); else if(name.equals("char")) returnValue = value.toString().charAt(0); else if(name.equals("java.util.Date")) returnValue = Date.parse(value.toString()); else if(name.equals("java.lang.String")) returnValue = value.toString(); cls.getField(pinfo.name).set(result,returnValue); } } catch (Exception e) { e.printStackTrace(); } return result; }
将WebService调用获得的对象转换成对象数组
public static Object[] toObjects(Object obj,Class<?> cls) { if(obj==null) return null; if(!(obj instanceof SoapObject)) return null; SoapObject so = (SoapObject)obj; int count = so.getPropertyCount(); Object[] objs = new Object[count]; for(int i=0;i<count;i++) { objs[i] = toObject(so.getProperty(i),cls); } return objs; }
public static ArrayList<Object> toObjectList(Object obj,Class<?> cls) { if(obj==null) return null; if(!(obj instanceof SoapObject)) return null; SoapObject so = (SoapObject)obj; int count = so.getPropertyCount(); ArrayList<Object> objs = new ArrayList<Object>(); for(int i=0;i<count;i++) { objs.add(toObject(so.getProperty(i),cls)); } return objs; }