转--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;    
    }    
复制代码

 

posted on 2015-03-27 00:42  左手指月  阅读(148)  评论(0编辑  收藏  举报