Android調用WebService示例代碼以下(轉):java
1 package com.example.wsapp; 2 3 4 5 import java.io.IOException; 6 import java.util.ArrayList; 7 import java.util.List; 8 9 import org.json.JSONArray; 10 import org.json.JSONObject; 11 import org.ksoap2.SoapEnvelope; 12 import org.ksoap2.serialization.SoapObject; 13 import org.ksoap2.serialization.SoapPrimitive; 14 import org.ksoap2.serialization.SoapSerializationEnvelope; 15 import org.ksoap2.transport.HttpTransportSE; 16 import org.xmlpull.v1.XmlPullParserException; 17 18 import android.app.Activity; 19 import android.app.ProgressDialog; 20 import android.os.AsyncTask; 21 import android.os.Bundle; 22 import android.view.LayoutInflater; 23 import android.view.View; 24 import android.view.View.OnClickListener; 25 import android.view.ViewGroup; 26 import android.widget.BaseAdapter; 27 import android.widget.Button; 28 import android.widget.ListView; 29 import android.widget.TextView; 30 31 import com.example.model.User; 32 33 public class MainActivity extends Activity { 34 35 private Button button; 36 37 // WS 38 private static String NAME_SPACE = "http://train.shd.com/"; 39 private static String METHOD_NAME = "getAllUsers"; 40 private static String WSDL_URL = "http://10.211.96.131:8080/ServiceTrain/TestPort?wsdl"; 41 // private String SOAP_ACTION = "http://hello.shd.com/sayHello"; 42 43 private UserTask userTask; 44 45 private ListView listView; 46 private ListAdapter adapter; 47 private ProgressDialog dialog; 48 49 @Override 50 protected void onCreate(Bundle savedInstanceState) { 51 super.onCreate(savedInstanceState); 52 setContentView(R.layout.activity_main); 53 54 button = (Button) findViewById(R.id.button1); 55 button.setOnClickListener(new OnClickListener() { 56 57 @Override 58 public void onClick(View v) { 59 userTask = new UserTask(); 60 userTask.execute(); 61 } 62 }); 63 64 listView = (ListView)findViewById(R.id.listView); 65 dialog = new ProgressDialog(this); 66 dialog.setMessage("正在加載,請稍後。。。"); 67 // .setMessage("") 68 } 69 70 class UserTask extends AsyncTask<Void, Void, List<User>> { 71 72 @Override 73 protected void onPreExecute() { 74 dialog.show(); 75 super.onPreExecute(); 76 } 77 78 @Override 79 protected List<User> doInBackground(Void... params) { 80 List<User> data = new ArrayList<User>(); 81 User user; 82 83 SoapObject request = new SoapObject(NAME_SPACE, METHOD_NAME); 84 SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 85 envelope.bodyOut = request; 86 87 envelope.setOutputSoapObject(request); 88 89 HttpTransportSE ht = new HttpTransportSE(WSDL_URL); 90 ht.debug = true; 91 92 try { 93 ht.call(null, envelope); 94 if(envelope.getResponse() != null){ 95 //在服務器端返回值是String類型的數值的時候使用SoapObject soapObject = (SoapObject) envelope.getResponse(); 96 //和 SoapObject result = (SoapObject)envelope.bodyIn;這兩種方法來接受值都會報出 97 //java.lang.ClassCastException: org.ksoap2.serialization.SoapPrimitive這樣的錯誤。 咱們可使用 Object object = 98 //envelope.getResponse();就能夠解決這種錯誤。或者 99 //org.ksoap2.serialization.SoapPrimitive soapPrimitive =(SoapPrimitive) envelope.getResponse(); 100 101 //服務器返回String類型的json,直接傳回json獲取不到數據。 102 SoapPrimitive result = (SoapPrimitive) envelope.getResponse(); 103 JSONObject obj = new JSONObject(result.toString()); 104 JSONArray jsonArray = (JSONArray)obj.getJSONArray("data"); 105 106 for (int i = 0; i < jsonArray.length(); i++) { 107 JSONObject json = jsonArray.getJSONObject(i); 108 user = new User(); 109 user.setName(json.getString("name")); 110 user.setPassword(json.getString("phone")); 111 data.add(user); 112 } 113 114 } 115 116 } catch (IOException e) { 117 e.printStackTrace(); 118 } catch (XmlPullParserException e) { 119 e.printStackTrace(); 120 } catch (org.json.JSONException e) { 121 // TODO Auto-generated catch block 122 e.printStackTrace(); 123 } 124 return data; 125 } 126 127 @Override 128 protected void onPostExecute(List<User> result) { 129 dialog.dismiss(); 130 if (adapter == null) { 131 adapter = new ListAdapter(result); 132 listView.setAdapter(adapter); 133 }else{ 134 adapter.listData = result; 135 adapter.notifyDataSetChanged(); 136 } 137 super.onPostExecute(result); 138 } 139 } 140 141 class ListAdapter extends BaseAdapter{ 142 143 private List<User> listData; 144 145 public ListAdapter(List<User> listData) { 146 super(); 147 this.listData = listData; 148 } 149 150 @Override 151 public int getCount() { 152 // TODO Auto-generated method stub 153 return listData.size(); 154 } 155 156 @Override 157 public Object getItem(int position) { 158 // TODO Auto-generated method stub 159 return listData.size(); 160 } 161 162 @Override 163 public long getItemId(int position) { 164 // TODO Auto-generated method stub 165 return position; 166 } 167 168 @Override 169 public View getView(int position, View convertView, ViewGroup parent) { 170 ViewHolder viewHolder = null; 171 if(convertView == null){ 172 viewHolder = new ViewHolder(); 173 convertView = LayoutInflater.from(MainActivity.this).inflate(R.layout.list_item, null); 174 viewHolder.tv_name = (TextView)convertView.findViewById(R.id.tv_namevalue); 175 viewHolder.tv_password = (TextView)convertView.findViewById(R.id.tv_phonevalue); 176 convertView.setTag(viewHolder); 177 }else{ 178 viewHolder = (ViewHolder)convertView.getTag(); 179 } 180 User user = listData.get(position); 181 viewHolder.tv_name.setText(user.getName()); 182 viewHolder.tv_password.setText(user.getPassword()); 183 184 return convertView; 185 } 186 187 class ViewHolder{ 188 TextView tv_name; 189 TextView tv_password; 190 } 191 192 } 193 194 }