【android】访问web service(大概功能版)
增加功能:
1,用户点击次数过快。提示。
2,增加progressBar在线程连接web service的时候出现。
3,增加ksoap连接超时。默认链接超时时间过长。体验不好。
4,网络超时连接提示。
layout xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" > <!-- 建立一个progressbar当进程在进行处理的时候会出现 --> <ProgressBar android:id="@+id/processBar" android:layout_width="wrap_content" android:layout_height="wrap_content" style="?android:attr/progressBarStyleSmallTitle" /> <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBottom="@+id/userName" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:text="UserName" /> <EditText android:id="@+id/userName" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_alignParentTop="true" android:ems="10" /> <TextView android:id="@+id/textView3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_below="@+id/userName" android:layout_marginTop="28dp" android:text="PassWord" /> <EditText android:id="@+id/passWord" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBaseline="@+id/textView3" android:layout_alignBottom="@+id/textView3" android:layout_alignParentRight="true" android:ems="10" /> <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_centerVertical="true" android:text="Button" /> <TextView android:id="@+id/retrunValue" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_below="@+id/passWord" android:layout_marginTop="32dp" android:text="Large Text" android:textAppearance="?android:attr/textAppearanceLarge" /></RelativeLayout>
package com.duduli.li;import java.io.IOException;import java.util.List;import org.apache.http.HttpResponse;import org.apache.http.HttpStatus;import org.apache.http.client.ClientProtocolException;import org.apache.http.client.HttpClient;import org.apache.http.client.methods.HttpGet;import org.apache.http.impl.client.DefaultHttpClient;import org.apache.http.params.BasicHttpParams;import org.apache.http.params.HttpConnectionParams;import org.apache.http.params.HttpParams;import org.ksoap2.SoapEnvelope;import org.ksoap2.serialization.SoapObject;import org.ksoap2.serialization.SoapSerializationEnvelope;import org.ksoap2.transport.HttpTransportSE;import org.xmlpull.v1.XmlPullParserException;import android.app.Activity;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.view.Window;import android.widget.Button;import android.widget.EditText;import android.widget.TextView;import android.widget.Toast;import com.google.gson.Gson;import com.google.gson.reflect.TypeToken;public class MainActivity extends Activity {private TextView tv,tv2;private Button b;private EditText name,password;private MyHandler myHandler;private HttpTransportSE ht;private boolean processFlag = true;//private Handler handler;private SoapSerializationEnvelope envelope;private static final String SERVICE_NS = "http://li.duduli.com/";private static final String SERVICE_URL="http://10.0.2.2:8080/MyContact/services/LoginImplPort"; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);// 窗口进度栏可见 requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS); setContentView(R.layout.activity_main); setProgressBarIndeterminateVisibility(false); b = (Button) this.findViewById(R.id.button1); tv = (TextView) this.findViewById(R.id.textView1); tv2 = (TextView) this.findViewById(R.id.retrunValue); name = (EditText) this.findViewById(R.id.userName); password = (EditText) this.findViewById(R.id.passWord); myHandler = new MyHandler(); b.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubsetProgressBarIndeterminateVisibility(true);if (processFlag) { processFlag = false;;// new Thread(new MyThread()).start(); new TimeThread().start(); }else{ setProgressBarIndeterminateVisibility(false); Toast.makeText(getApplicationContext(), "你点击太快了", Toast.LENGTH_SHORT).show(); }}}); } class MyHandler extends Handler{@Overridepublic void handleMessage(Message msg) {// TODO Auto-generated method stub//super.handleMessage(msg);Bundle b = msg.getData();//tv2.setText(b.getString("value")); System.out.println(b.getString("value"));String str = b.getString("value");String flag = str.substring(0, str.indexOf("#"));String json = str.substring(str.indexOf("#")+1,str.length());System.out.println(flag);System.out.println();if("1".equals(flag)){Gson g2 = new Gson();List<Person> p = g2.fromJson(json, new TypeToken<List<Person>>(){}.getType());System.out.println(p.size());for(int i=0;i<p.size();i++){System.out.println(p.get(i).getName());}setProgressBarIndeterminateVisibility(false);tv2.setText(p.get(0).getName());}else{setProgressBarIndeterminateVisibility(false);tv2.setText(json);}/* *///tv2.setText(b.getString("value"));} } class MyThread implements Runnable{@Overridepublic void run() {// TODO Auto-generated method stubMessage msg = new Message();Bundle b = new Bundle();//String values = "";String values = "0#网络连接失败";//超时时间5秒ht = new HttpTransportSE(SERVICE_URL,5000); ht.debug = true; //使用soap1.1协议创建Envelop对象 envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); //实例化SoapObject对象 SoapObject request = new SoapObject(SERVICE_NS, "reJson"); // request.addProperty("arg0", name.getText().toString());// request.addProperty("arg1", password.getText().toString()); envelope.bodyOut = request;//你要执行的方法try {ht.call(null, envelope);if(envelope.getResponse()!=null){SoapObject result = (SoapObject) envelope.bodyIn;values = result.getProperty(0).toString(); }else{values = "nothing";}} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (XmlPullParserException e) {// TODO Auto-generated catch blocke.printStackTrace();}b.putString("value", values);msg.setData(b);myHandler.sendMessage(msg);} } /** * 计时线程(防止在一定时间段内重复点击按钮) */ private class TimeThread extends Thread {public void run() {try {sleep(1000);processFlag = true;} catch (Exception e) {e.printStackTrace();}}} @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.activity_main, menu); return true; }}