android調用webservice接口獲取信息
我的有一篇博客上講了如何基于CXF搭建webservice,service層的接口會被部署到tomcat上,這一篇我就講一下如何在安卓中調用這些接口傳遞參數(shù)。
1.在lib中放入ksoap2的jar包并導入
2.在xml 配置文件中加入:
<!-- 訪問網絡的權限 --> <uses-permission android:name="android.permission.INTERNET" />
3.接下來就要通過代碼調用借口了
String WSDL_URI = "http://localhost:8080/WebService4/getNewIdPort?wsdl";//wsdl 的uri String namespace = "http://services.he.TSD/";//namespace String methodName = "getNew";//要調用的方法名稱 // 創(chuàng)建HttpTransportSE對象 HttpTransportSE ht = new HttpTransportSE(WSDL_URI); ht.debug = true; // 使用soap1.1協(xié)議創(chuàng)建Envelop對象 SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);// 實例化SoapObject對象 SoapObject object = new SoapObject(namespace, methodName); // 設置參數(shù) object.addProperty("arg0", "hhh"); // 將SoapObject對象設置為SoapSerializationEnvelope對象的傳出SOAP消息 envelope.bodyOut = object;//由于是發(fā)送請求,所以是設置bodyOut envelope.dotNet =false; envelope.setOutputSoapObject(object); try{ // 調用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上的,為了同處于一個網段,要手機和電腦連一個wifi。 ipv4查找用window+R,接著cmd,最后ipconfig 即可查到。
6.要關閉windows防火墻
7.當時我還遇到了一個問題,就是當傳遞的信息復雜時,比如傳遞list型的一個自定義的類,會出現(xiàn)問題,當時我是重寫了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的時候初始化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());// 當EditText數(shù)據發(fā)生改變的時候存到data變量中*/ item=(HashMap)mData.get(position); item.put("goodsSellNum",s.toString()); mData.set(position,item); spendMoney.setText(String.valueOf(calculate()));//計算總價格 } } } 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;// 用來定義的標志性主鍵,可不用關心 } 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.調如何用ListAdapter類
ListAdapter adapter = new ListAdapter(this, list,spendMoney); lv_goodsList.setAdapter(adapter);
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
- 在Android中訪問WebService接口的方法
- Android開發(fā)調用WebService的方法示例
- Android 中利用 ksoap2 調用 WebService的示例代碼
- Android ksoap調用webservice批量上傳多張圖片詳解
- Android 通過webservice上傳多張圖片到指定服務器詳解
- Android通過ksoap2傳遞復雜數(shù)據類型及CXF發(fā)布的webservice詳細介紹
- 在Android中調用WebService實例
- Android通過Webservice操作sqlserver數(shù)據庫實例代碼
- android調用WebService實例分析
- android中soap協(xié)議使用(ksoap調用webservice)
相關文章
Android ListView適配器(Adapter)優(yōu)化方法詳解
這篇文章主要介紹了Android ListView優(yōu)化方法詳解的相關資料,這里舉例說明該如何對ListView 進行優(yōu)化,具有一定的參考價值,需要的朋友可以參考下2016-11-11android 獲取本機的IP地址和mac物理地址的實現(xiàn)方法
本文主要介紹android 獲取本機的IP地址和mac物理地址的實現(xiàn)方法,這里提供示例代碼,實現(xiàn)功能,有需要的小伙伴可以參考下2016-09-09Android中Service和Activity相互通信示例代碼
在android中Activity負責前臺界面展示,service負責后臺的需要長期運行的任務。下面這篇文章主要給大家介紹了關于Android中Service和Activity相互通信的相關資料,需要的朋友可以參考借鑒,下面來一起看看吧。2017-09-09Android ListView常見的優(yōu)化方式詳解
這篇文章主要介紹了Android ListView常見的優(yōu)化方式詳解的相關資料,需要的朋友可以參考下2017-02-02一篇文章弄懂Android自定義viewgroup的相關難點
這篇文章主要給大家介紹了關于如何通過一篇文章弄懂Android中自定義viewgroup的一些相關難點,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2018-06-06