Android學習之——(4)項目中的調用WebService學習

來源:互聯網
上載者:User

接上一篇:http://blog.csdn.net/fu222cs98/article/details/21556651
下面給出如何調用WebService的方法的處理:

public void DoTuiKuDJ(final String dtZzjl, final String dtRkdmx,        final String dtRkd) {//這裡的三個String都是將類放到List當中,然後將List轉化成XML的形式來傳遞的,List轉化XML的代碼下面會給出    new Webservice(context, handler, "TuiKuDJ", true, null, null, null) {        @Override        public void addProgerty(SoapObject rpc) {                    // TODO Auto-generated method stub            method = 2;            rpc.addProperty("dtZzjl", dtZzjl);            rpc.addProperty("dtRkdmx", dtRkdmx);            rpc.addProperty("dtRkd", dtRkd);        }    };}/*** 資料傳回來處理*/private Handler handler = new Handler() {    @SuppressWarnings("unchecked")    public void handleMessage(android.os.Message msg) {        switch (msg.what) {        case 0:            if (method == 1) {                zzjl = (List<QiXieZzjl>) (msg.obj);//msg.obj為傳回來的資料                tuiKuFragment.DealZzjl();                break;            }                break;            break;        }        };};
WebService類:
/** * web service通訊類 * @author Administrator 上傳時要分int,String 而接受資料射計類都要是String */public abstract class Webservice {    public static final String NAMESPACE = "http://tempuri.org/";    // WebService地址    private String URL;    /**     * web service通訊     * @param context     * @param handler     * @param methodName     *            方法名     * @param flag     *            true:get data that should be resolved ;false:send data     * @param cla     *            The class to be reflected     * @param entityname     *            需要轉換成類的包名string     */    @SuppressWarnings("rawtypes")    public Webservice(Context context, Handler handler, String methodName,            boolean flag, Class cla, ParseData parse, String entityname) {        URL = "http://"                + context.getSharedPreferences("ServiceIP",                        Context.MODE_PRIVATE).getString("IP",                        "127.0.0.1/EOIISService.asmx");        tongXun(context, handler, methodName, flag, cla, parse, entityname);    }    /**     * 以webservice擷取資料     */    @SuppressWarnings("rawtypes")    private void tongXun(final Context context, final Handler handler,            final String methodName, final boolean flag, final Class cla,            final ParseData parse, final String entityname) {        Thread thread = new Thread() {            public void run() {                webServiceThread(context, handler, methodName, flag, cla,                        parse, entityname);            }        };        thread.start();        // thread.    }    /**     * 設定webservice要傳遞的屬性     */    public abstract void addProgerty(SoapObject rpc);    /**     * webservice 線程     *      * @param context     * @param handler     * @param methodName     * @param flag     *            true:get data that should be resolved ;false:send data     * @param cla     *            The class to be reflected * @param entityname 需要轉換成類的包名string     */    @SuppressWarnings("rawtypes")    public void webServiceThread(final Context context, final Handler handler,            String methodName, boolean flag, Class cla, final ParseData parse,            String entityname) {        try {            // System.out.println("rpc------");            // 指定webservice的命名空間和調用的方法名            Object obj1 = null;            SoapObject rpc = new SoapObject(NAMESPACE, methodName);            addProgerty(rpc);            MyHttptran ht = new MyHttptran(URL, 5000);            ht.debug = true;            // 產生調用Webservice方法的SOAP請求資訊.該資訊由SoapSerializationEnvelope對象描述            SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(                    SoapEnvelope.VER11);            envelope.bodyOut = rpc;            envelope.dotNet = true;            envelope.setOutputSoapObject(rpc);            ht.call(NAMESPACE + methodName, envelope);            if (envelope.bodyIn.toString().startsWith("SoapFault")) {                SoapFault sf = (SoapFault) (envelope.bodyIn);                Log.i("fault", sf.faultstring);                if (handler != null) {                    Message message = Message.obtain(handler);                    message.what = 3;                    message.obj = sf.faultstring;                    message.sendToTarget();                }                return;            }            // 得到返回結果            Log.i("bodyIn", envelope.bodyIn.toString());            SoapObject result = (SoapObject) envelope.bodyIn;            if (result.toString().equals(methodName + "Response{}")) {                // pd = false;                if (null != handler) {                    // send message to the main thread                    Message message = Message.obtain(handler);                    // message.obj = year;                    message.what = 1;                    message.sendToTarget();                }                return;            }            if (parse == null) {                if (null != handler) {                    Message message = Message.obtain(handler);                    message.obj = result.getProperty(methodName + "Result")                            .toString();                    message.what = 1;                    message.sendToTarget();                }                return;            }            SoapObject detail = (SoapObject) result.getProperty(methodName                    + "Result");            if (detail.toString().equals("anyType{}")) {                if (null != handler) {                    Message message = Message.obtain(handler);                    message.what = 2;                    message.sendToTarget();                }            } else {                obj1 = parse.doing(detail, cla, entityname);                // 發送訊息回主線程                if (null != handler) {                    Message message = Message.obtain(handler);                    message.obj = obj1;                    message.what = 0;                    message.sendToTarget();                }            }        } catch (ConnectException e) {            e.printStackTrace();            if (null != handler) {                handler.sendEmptyMessage(-1);            }        } catch (SocketTimeoutException e) {            // TODO: handle exception            e.printStackTrace();            if (null != handler) {                handler.sendEmptyMessage(-1);            }        } catch (XmlPullParserException e) {            // TODO: handle exception            e.printStackTrace();            if (null != handler) {                handler.sendEmptyMessage(-1);            }         } catch (Exception e) {            e.printStackTrace();            if (null != handler) {                Message message = Message.obtain(handler);                message.obj = e.getMessage();                message.what = -2;                message.sendToTarget();            }        }    }}
關於將List<Object> 轉化為XML的方法
/** * 用於製造xml類型的字串 * @author Administrator syc * @since 2012-10-31 */public class CreateXml {    public String createXml(@SuppressWarnings("rawtypes") List list,            String tableName) {        String xml = "";        StringWriter xmlWriter = new StringWriter();        XmlSerializer xmlSerializer = Xml.newSerializer();        try {            xmlSerializer.setOutput(xmlWriter);            xmlSerializer.startDocument("UTF-16", null);            xmlSerializer.startTag("", "NewDataSet");            // DT            if (null != list) {                FanShe reflect = new FanShe();                List<String> shuxingList = reflect.getPropertyNames(list.get(0)                        .getClass());                for (Object object : list) {                    xmlSerializer.startTag("", object.getClass().getName());                    @SuppressWarnings("unchecked")                    List<String> vlaueList = reflect.getValueList(shuxingList,                            object);                    for (int i = 0; i < shuxingList.size(); i++) {                        xmlSerializer.startTag("", shuxingList.get(i));                        if (vlaueList.get(i) == null) {                            xmlSerializer.text("");                        } else {                            xmlSerializer.text(vlaueList.get(i));                        }                        xmlSerializer.endTag("", shuxingList.get(i));                    }                    xmlSerializer.endTag("", object.getClass().getName());                }                xmlSerializer.endTag("", "NewDataSet");                // 屬性集合                xmlSerializer.endDocument();                xmlSerializer.flush();                // xmlWriter.flush();                xml = xmlWriter.toString().split("\\?>")[1];            }        } catch (IllegalArgumentException e) {            // TODO Auto-generated catch block            e.printStackTrace();        } catch (IllegalStateException e) {            // TODO Auto-generated catch block            e.printStackTrace();        } catch (IOException e) {            // TODO Auto-generated catch block            e.printStackTrace();        } finally {            if (xmlWriter != null) {                try {                    xmlWriter.close();                } catch (IOException e) {                    // TODO Auto-generated catch block                    e.printStackTrace();                }            }        }        return xml;    }}
轉化為XML調用方式如下:
qiXieZzjlEntitieString = new CreateXml().createXml(qiXieZzjlEntities,"qiXieZzjlEntities");//qiXieZzjlEntities聲明如下:private List<QiXieZzjlEntity> qiXieZzjlEntities = new ArrayList<QiXieZzjlEntity>();     //"qiXieZzjlEntities"字串名字可以任意 



Mr.傅:學習筆記
歡迎轉載,轉載註明出處,謝謝

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.