Android調用WebService

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 }
相關文章
相關標籤/搜索