Android学习之——(4)项目中的调用WebService学习

下面给出如何调用WebService的方法的处理:
  1. public void DoTuiKuDJ(final String dtZzjl, final String dtRkdmx,  
  2.         final String dtRkd) {//这里的三个String都是将类放到List当中,然后将List转化成XML的形式来传递的,List转化XML的代码下面会给出  
  3.     new Webservice(context, handler, "TuiKuDJ"truenullnullnull) {  
  4.         @Override  
  5.         public void addProgerty(SoapObject rpc) {  
  6.                     // TODO Auto-generated method stub  
  7.             method = 2;  
  8.             rpc.addProperty("dtZzjl", dtZzjl);  
  9.             rpc.addProperty("dtRkdmx", dtRkdmx);  
  10.             rpc.addProperty("dtRkd", dtRkd);  
  11.         }  
  12.     };  
  13. }  
  14. /** 
  15. * 数据传回来处理 
  16. */  
  17. private Handler handler = new Handler() {  
  18.     @SuppressWarnings("unchecked")  
  19.     public void handleMessage(android.os.Message msg) {  
  20.         switch (msg.what) {  
  21.         case 0:  
  22.             if (method == 1) {  
  23.                 zzjl = (List<QiXieZzjl>) (msg.obj);//msg.obj为传回来的数据  
  24.                 tuiKuFragment.DealZzjl();  
  25.                 break;  
  26.             }  
  27.                 break;  
  28.             break;  
  29.         }  
  30.         };  
  31. };  
WebService类:
  1. /** 
  2.  * web service通信类 
  3.  * @author Administrator 上传时要分int,String 而接受数据射计类都要是String 
  4.  */  
  5. public abstract class Webservice {  
  6.     public static final String NAMESPACE = "http://tempuri.org/";  
  7.     // WebService地址  
  8.     private String URL;  
  9.     /** 
  10.      * web service通信 
  11.      * @param context 
  12.      * @param handler 
  13.      * @param methodName 
  14.      *            方法名 
  15.      * @param flag 
  16.      *            true:get data that should be resolved ;false:send data 
  17.      * @param cla 
  18.      *            The class to be reflected 
  19.      * @param entityname 
  20.      *            需要转换成类的包名string 
  21.      */  
  22.     @SuppressWarnings("rawtypes")  
  23.     public Webservice(Context context, Handler handler, String methodName,  
  24.             boolean flag, Class cla, ParseData parse, String entityname) {  
  25.         URL = "http://"  
  26.                 + context.getSharedPreferences("ServiceIP",  
  27.                         Context.MODE_PRIVATE).getString("IP",  
  28.                         "127.0.0.1/EOIISService.asmx");  
  29.         tongXun(context, handler, methodName, flag, cla, parse, entityname);  
  30.     }  
  31.     /** 
  32.      * 以webservice获取数据 
  33.      */  
  34.     @SuppressWarnings("rawtypes")  
  35.     private void tongXun(final Context context, final Handler handler,  
  36.             final String methodName, final boolean flag, final Class cla,  
  37.             final ParseData parse, final String entityname) {  
  38.         Thread thread = new Thread() {  
  39.             public void run() {  
  40.                 webServiceThread(context, handler, methodName, flag, cla,  
  41.                         parse, entityname);  
  42.             }  
  43.         };  
  44.         thread.start();  
  45.         // thread.  
  46.     }  
  47.     /** 
  48.      * 设置webservice要传递的属性 
  49.      */  
  50.     public abstract void addProgerty(SoapObject rpc);  
  51.     /** 
  52.      * webservice 线程 
  53.      *  
  54.      * @param context 
  55.      * @param handler 
  56.      * @param methodName 
  57.      * @param flag 
  58.      *            true:get data that should be resolved ;false:send data 
  59.      * @param cla 
  60.      *            The class to be reflected * @param entityname 需要转换成类的包名string 
  61.      */  
  62.     @SuppressWarnings("rawtypes")  
  63.     public void webServiceThread(final Context context, final Handler handler,  
  64.             String methodName, boolean flag, Class cla, final ParseData parse,  
  65.             String entityname) {  
  66.         try {  
  67.             // System.out.println("rpc------");  
  68.             // 指定webservice的命名空间和调用的方法名  
  69.             Object obj1 = null;  
  70.             SoapObject rpc = new SoapObject(NAMESPACE, methodName);  
  71.             addProgerty(rpc);  
  72.             MyHttptran ht = new MyHttptran(URL, 5000);  
  73.             ht.debug = true;  
  74.             // 生成调用Webservice方法的SOAP请求信息.该信息由SoapSerializationEnvelope对象描述  
  75.             SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(  
  76.                     SoapEnvelope.VER11);  
  77.             envelope.bodyOut = rpc;  
  78.             envelope.dotNet = true;  
  79.             envelope.setOutputSoapObject(rpc);  
  80.             ht.call(NAMESPACE + methodName, envelope);  
  81.             if (envelope.bodyIn.toString().startsWith("SoapFault")) {  
  82.                 SoapFault sf = (SoapFault) (envelope.bodyIn);  
  83.                 Log.i("fault", sf.faultstring);  
  84.                 if (handler != null) {  
  85.                     Message message = Message.obtain(handler);  
  86.                     message.what = 3;  
  87.                     message.obj = sf.faultstring;  
  88.                     message.sendToTarget();  
  89.                 }  
  90.                 return;  
  91.             }  
  92.             // 得到返回结果  
  93.             Log.i("bodyIn", envelope.bodyIn.toString());  
  94.             SoapObject result = (SoapObject) envelope.bodyIn;  
  95.             if (result.toString().equals(methodName + "Response{}")) {  
  96.                 // pd = false;  
  97.                 if (null != handler) {  
  98.                     // send message to the main thread  
  99.                     Message message = Message.obtain(handler);  
  100.                     // message.obj = year;  
  101.                     message.what = 1;  
  102.                     message.sendToTarget();  
  103.                 }  
  104.                 return;  
  105.             }  
  106.             if (parse == null) {  
  107.                 if (null != handler) {  
  108.                     Message message = Message.obtain(handler);  
  109.                     message.obj = result.getProperty(methodName + "Result")  
  110.                             .toString();  
  111.                     message.what = 1;  
  112.                     message.sendToTarget();  
  113.                 }  
  114.                 return;  
  115.             }  
  116.             SoapObject detail = (SoapObject) result.getProperty(methodName  
  117.                     + "Result");  
  118.             if (detail.toString().equals("anyType{}")) {  
  119.                 if (null != handler) {  
  120.                     Message message = Message.obtain(handler);  
  121.                     message.what = 2;  
  122.                     message.sendToTarget();  
  123.                 }  
  124.             } else {  
  125.                 obj1 = parse.doing(detail, cla, entityname);  
  126.                 // 发送消息回主线程  
  127.                 if (null != handler) {  
  128.                     Message message = Message.obtain(handler);  
  129.                     message.obj = obj1;  
  130.                     message.what = 0;  
  131.                     message.sendToTarget();  
  132.                 }  
  133.             }  
  134.         } catch (ConnectException e) {  
  135.             e.printStackTrace();  
  136.             if (null != handler) {  
  137.                 handler.sendEmptyMessage(-1);  
  138.             }  
  139.         } catch (SocketTimeoutException e) {  
  140.             // TODO: handle exception  
  141.             e.printStackTrace();  
  142.             if (null != handler) {  
  143.                 handler.sendEmptyMessage(-1);  
  144.             }  
  145.         } catch (XmlPullParserException e) {  
  146.             // TODO: handle exception  
  147.             e.printStackTrace();  
  148.             if (null != handler) {  
  149.                 handler.sendEmptyMessage(-1);  
  150.             }  
  151.    
  152.         } catch (Exception e) {  
  153.             e.printStackTrace();  
  154.             if (null != handler) {  
  155.                 Message message = Message.obtain(handler);  
  156.                 message.obj = e.getMessage();  
  157.                 message.what = -2;  
  158.                 message.sendToTarget();  
  159.             }  
  160.         }  
  161.     }  
  162. }  
关于将List<Object> 转化为XML的方法
  1. /** 
  2.  * 用于制造xml类型的字符串 
  3.  * @author Administrator syc 
  4.  * @since 2012-10-31 
  5.  */  
  6. public class CreateXml {  
  7.     public String createXml(@SuppressWarnings("rawtypes") List list,  
  8.             String tableName) {  
  9.         String xml = "";  
  10.         StringWriter xmlWriter = new StringWriter();  
  11.         XmlSerializer xmlSerializer = Xml.newSerializer();  
  12.         try {  
  13.             xmlSerializer.setOutput(xmlWriter);  
  14.             xmlSerializer.startDocument("UTF-16"null);  
  15.             xmlSerializer.startTag("""NewDataSet");  
  16.             // DT  
  17.             if (null != list) {  
  18.                 FanShe reflect = new FanShe();  
  19.                 List<String> shuxingList = reflect.getPropertyNames(list.get(0)  
  20.                         .getClass());  
  21.                 for (Object object : list) {  
  22.                     xmlSerializer.startTag("", object.getClass().getName());  
  23.                     @SuppressWarnings("unchecked")  
  24.                     List<String> vlaueList = reflect.getValueList(shuxingList,  
  25.                             object);  
  26.                     for (int i = 0; i < shuxingList.size(); i++) {  
  27.                         xmlSerializer.startTag("", shuxingList.get(i));  
  28.                         if (vlaueList.get(i) == null) {  
  29.                             xmlSerializer.text("");  
  30.                         } else {  
  31.                             xmlSerializer.text(vlaueList.get(i));  
  32.                         }  
  33.                         xmlSerializer.endTag("", shuxingList.get(i));  
  34.                     }  
  35.                     xmlSerializer.endTag("", object.getClass().getName());  
  36.                 }  
  37.                 xmlSerializer.endTag("""NewDataSet");  
  38.                 // 属性集合  
  39.                 xmlSerializer.endDocument();  
  40.                 xmlSerializer.flush();  
  41.                 // xmlWriter.flush();  
  42.                 xml = xmlWriter.toString().split("\\?>")[1];  
  43.             }  
  44.         } catch (IllegalArgumentException e) {  
  45.             // TODO Auto-generated catch block  
  46.             e.printStackTrace();  
  47.         } catch (IllegalStateException e) {  
  48.             // TODO Auto-generated catch block  
  49.             e.printStackTrace();  
  50.         } catch (IOException e) {  
  51.             // TODO Auto-generated catch block  
  52.             e.printStackTrace();  
  53.         } finally {  
  54.             if (xmlWriter != null) {  
  55.                 try {  
  56.                     xmlWriter.close();  
  57.                 } catch (IOException e) {  
  58.                     // TODO Auto-generated catch block  
  59.                     e.printStackTrace();  
  60.                 }  
  61.             }  
  62.         }  
  63.         return xml;  
  64.     }  
  65. }  
转化为XML调用方式如下:
    1. qiXieZzjlEntitieString = new CreateXml().createXml(qiXieZzjlEntities,"qiXieZzjlEntities");  
    2. //qiXieZzjlEntities声明如下:private List<QiXieZzjlEntity> qiXieZzjlEntities = new ArrayList<QiXieZzjlEntity>();       
    3. //"qiXieZzjlEntities"字符串名字可以任意  

Android学习之——(4)项目中的调用WebService学习,,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。