您好,登錄后才能下訂單哦!
我的有一篇博客上講了如何基于CXF搭建webservice,service層的接口會被部署到tomcat上,這一篇我就講一下如何在安卓中調(diào)用這些接口傳遞參數(shù)。
1.在lib中放入ksoap2的jar包并導(dǎo)入
2.在xml 配置文件中加入:
<!-- 訪問網(wǎng)絡(luò)的權(quán)限 --> <uses-permission android:name="android.permission.INTERNET" />
3.接下來就要通過代碼調(diào)用借口了
String WSDL_URI = "http://localhost:8080/WebService4/getNewIdPort?wsdl";//wsdl 的uri String namespace = "http://services.he.TSD/";//namespace String methodName = "getNew";//要調(diào)用的方法名稱 // 創(chuàng)建HttpTransportSE對象 HttpTransportSE ht = new HttpTransportSE(WSDL_URI); ht.debug = true; // 使用soap1.1協(xié)議創(chuàng)建Envelop對象 SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);// 實(shí)例化SoapObject對象 SoapObject object = new SoapObject(namespace, methodName); // 設(shè)置參數(shù) object.addProperty("arg0", "hhh"); // 將SoapObject對象設(shè)置為SoapSerializationEnvelope對象的傳出SOAP消息 envelope.bodyOut = object;//由于是發(fā)送請求,所以是設(shè)置bodyOut envelope.dotNet =false; envelope.setOutputSoapObject(object); try{ // 調(diào)用webService ht.call(null, envelope); System.out.println("回傳的值 :"+envelope.getResponse()); } catch (Exception e) { e.printStackTrace(); String msg=e.getMessage(); System.out.println(msg); }
4.若webservice接收不到android傳來的值:
(1)參數(shù)名不對
(2).net的webservice要將envelope.dotNet =true,否則envelope.dotNet =false
5.由于是部署到tomcat上的,為了同處于一個(gè)網(wǎng)段,要手機(jī)和電腦連一個(gè)wifi。 ipv4查找用window+R,接著cmd,最后ipconfig 即可查到。
6.要關(guān)閉windows防火墻
7.當(dāng)時(shí)我還遇到了一個(gè)問題,就是當(dāng)傳遞的信息復(fù)雜時(shí),比如傳遞list型的一個(gè)自定義的類,會出現(xiàn)問題,當(dāng)時(shí)我是重寫了ListAdapter類,如下所示:
package com.adapter; /** * Created by hexiaolu on 2017/4/13. */ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.text.Editable; import android.text.TextWatcher; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.EditText; import android.widget.ListView; import android.widget.TextView; import com.example.administrator.stock2.R; public class ListAdapter extends BaseAdapter { HashMap item = new HashMap(); private LayoutInflater mInflater; //private List<Map<String, Object>> mData;// 存儲的EditText值 private ArrayList mData=new ArrayList(); //private ArrayList mDate = new ArrayList(); public Map<String, String> editorValue = new HashMap<String, String>();// private TextView spendMoney; public ListAdapter(Context context, ArrayList data,TextView spend) { spendMoney=spend; mData = data; mInflater = LayoutInflater.from(context); init(); } // 初始化 private void init() { editorValue.clear(); } @Override public int getCount() { return mData.size(); } @Override public Object getItem(int position) { return null; } @Override public long getItemId(int position) { return 0; } private Integer index = -1; @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder = null; // convertView為null的時(shí)候初始化convertView。 if (convertView == null) { holder = new ViewHolder(); convertView = mInflater.inflate(R.layout.list_item, null); holder.goodsName = (TextView) convertView .findViewById(R.id.list_item_goodsName); holder.goodsSellPrice = (TextView) convertView .findViewById(R.id.list_item_goodsSellPrice); holder.goodsUnit = (TextView) convertView .findViewById(R.id.list_item_goodsUnit); holder.goodsSellNum = (EditText) convertView .findViewById(R.id.list_item_goodsSellNum); holder.goodsSellNum.setTag(position); /*holder.goodsSellNum.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_UP) { index = (Integer) v.getTag(); } return false; } });*/ class MyTextWatcher implements TextWatcher { public MyTextWatcher(ViewHolder holder) { mHolder = holder; } private ViewHolder mHolder; @Override public void onTextChanged(CharSequence s, int start, int before, int count) { } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void afterTextChanged(Editable s) { if (s != null && !"".equals(s.toString())) { int position = (Integer) mHolder.goodsSellNum.getTag(); /*mData.get(position).put("goodsSellNum",s.toString());// 當(dāng)EditText數(shù)據(jù)發(fā)生改變的時(shí)候存到data變量中*/ item=(HashMap)mData.get(position); item.put("goodsSellNum",s.toString()); mData.set(position,item); spendMoney.setText(String.valueOf(calculate()));//計(jì)算總價(jià)格 } } } holder.goodsSellNum.addTextChangedListener(new MyTextWatcher(holder)); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); holder.goodsSellNum.setTag(position); } item=(HashMap)mData.get(position); Object value=item.get("goodsName"); //Object value = mData.get(position).get("list_item_goodsName"); if (value != null) { holder.goodsName.setText((String) value); } item=(HashMap)mData.get(position); value=item.get("goodsSellPrice"); //value = mData.get(position).get("list_item_goodsSellPrice"); if (value != null) { holder.goodsSellPrice.setText(value.toString()); } item=(HashMap)mData.get(position); value=item.get("goodsUnit"); //value = mData.get(position).get("list_item_goodsUnit"); if (value != null) { holder.goodsUnit.setText(value.toString()); } item=(HashMap)mData.get(position); value=item.get("goodsSellNum"); //value = mData.get(position).get("list_item_goodsSellNum"); if (value != null && !"".equals(value)) { holder.goodsSellNum.setText(value.toString()); } holder.goodsSellNum.clearFocus(); if (index != -1 && index == position) { holder.goodsSellNum.requestFocus(); } return convertView; } public final class ViewHolder { public TextView goodsName; public TextView goodsSellPrice; public EditText goodsSellNum;// ListView中的輸入 public TextView goodsUnit;// 用來定義的標(biāo)志性主鍵,可不用關(guān)心 } public float calculate() { float money = 0; for (int i = 0; i < mData.size(); i++) { HashMap item = new HashMap(); item = (HashMap) mData.get(i); float num = Float.parseFloat(item.get("goodsSellNum").toString()); float price = Float.parseFloat(item.get("goodsSellPrice").toString()); money = money + num * price; } return money; } }
8.調(diào)如何用ListAdapter類
ListAdapter adapter = new ListAdapter(this, list,spendMoney); lv_goodsList.setAdapter(adapter);
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持億速云。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。