Android 串連webservice(利用Google提供的jar包),androidwebservice
Android開發,需要串連webservice,之前就想用Google提供的jar包,:http://pan.baidu.com/s/1hqMTUHe
把它下載下來粘貼到libs檔案夾下即可:
網上有很多類似的方法,我嘗試了很多都沒有成功,最後發現是我下載的jar包有問題導致我一直卡在哪兒。
首先添加網路許可權:
<uses-permission android:name="android.permission.INTERNET"/>
這是全部代碼,包括擷取遠程webservice當中資料並用ListView顯示:
package com.example.webservice;import java.io.IOException;import java.util.ArrayList;import java.util.List;import org.ksoap2.SoapEnvelope;import org.ksoap2.SoapFault;import org.ksoap2.serialization.SoapObject;import org.ksoap2.serialization.SoapSerializationEnvelope;import org.ksoap2.transport.HttpTransportSE;import org.xmlpull.v1.XmlPullParserException;import android.os.Bundle;import android.app.Activity;import android.view.Menu;import android.view.View;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.ArrayAdapter;import android.widget.ListAdapter;import android.widget.ListView;import android.widget.Toast;public class MainActivity extends Activity { //命名空間 String nameSpace="http://tempuri.org/"; //調用方法 String methodName="selectStuAll";//webservice存在的方法名稱 String endPoint="http://10.0.2.2:8011/WebService.asmx?wsdl";//本地測試完整的連結 String soapAction="http://tempuri.org/selectStuAll";//命名空間和調用方法名 private ListView listview; private ListAdapter adapter; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); listview=(ListView) findViewById(R.id.listView1); adapter=new ArrayAdapter<String>(MainActivity.this,android.R.layout.simple_list_item_1,getsource()); listview.setAdapter(adapter); listview.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { // TODO 自動產生的方法存根 Toast.makeText(MainActivity.this, ">>"+adapter.getItem(arg2),1).show(); } }); }public List<String> getsource() { List<String> list=new ArrayList<String>(); //執行個體化SoapObject對象 SoapObject request=new SoapObject(nameSpace, methodName); //第二步:假設方法有參數的話,設定調用方法參數 /* request.addProperty("username","1"); request.addProperty("password","2"); request.addProperty("tel","3");*/ //獲得序列化的Envelope SoapSerializationEnvelope envelope=new SoapSerializationEnvelope(SoapEnvelope.VER12); envelope.bodyOut=request; envelope.dotNet=true; HttpTransportSE transport=new HttpTransportSE(endPoint); try { transport.call(soapAction, envelope); } catch (IOException e) { // TODO 自動產生的 catch 塊 e.printStackTrace(); } catch (XmlPullParserException e) { // TODO 自動產生的 catch 塊 e.printStackTrace(); } SoapObject result = null; try { result = (SoapObject)envelope.getResponse(); } catch (SoapFault e) { // TODO 自動產生的 catch 塊 e.printStackTrace(); } int count=result.getPropertyCount(); for(int index=1;index<count;index=index+3){ list.add(result.getProperty(index).toString()); } return list; }}
這樣就大功告成了,如果用到這個方法有問題,在下面評論,我會幫你解決。