异步调用webservice

参考:http://blog.csdn.net/lyq8479/article/details/6428288

增加网络权限

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="com.example.ADemo10"
          android:versionCode="1"
          android:versionName="1.0">
    <uses-sdk android:minSdkVersion="15"/>
    <uses-permission android:name="android.permission.INTERNET"></uses-permission>
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"></uses-permission>
    <uses-permission android:name="android.permission.INSTALL_PACKAGES"></uses-permission>
    <application android:label="@string/app_name" android:icon="@drawable/ic_launcher">
        <activity android:name="MyActivity"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
    </application>
</manifest>
package com.example.ADemo10;

import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;

import java.util.Date;

/**
 * 最好使用异步调用,否则可能产生UI阻塞错误。
 * 记得增加网络权限
 * myTextView.setText(result); 虽然这里能设定结果,
 * 但是设定这里的时候,出现异常,还不知道原因
 */
public class MyActivity extends Activity {
    /**
     * Called when the activity is first created.
     */
    private Button button;
    private EditText editText;
    private TextView textView2;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        button = (Button) findViewById(R.id.button);
        editText = (EditText) findViewById(R.id.editText);
        textView2 = (TextView) findViewById(R.id.textView2);

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (!validate()) {
                    textView2.setText((new Date()).toString() + ":请输入信息...");
                } else {
                    textView2.setText((new Date()).toString() + ":开始查询.....");
                    AnsyTry anys = new AnsyTry(textView2);
                    anys.execute();
                }

            }
        });

    }

    public boolean validate() {
        String str = editText.getText().toString();
        if (str == null || str.trim().length() == 0) {
            return false;
        }

        return true;
    }

    public void searchFromWebService(TextView myTextView) {
        String nameSpace = "http://WebXml.com.cn/";
        String methodName = "getMobileCodeInfo";
        String endPoint = "http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx";
        String soapAction = "http://WebXml.com.cn/getMobileCodeInfo";


        try {
            SoapObject rpc = new SoapObject(nameSpace, methodName);
            rpc.addProperty("mobileCode", editText.getText().toString());
            rpc.addProperty("userId", "");
            SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER10);
            envelope.bodyOut = rpc;
            envelope.dotNet = true;
            envelope.setOutputSoapObject(rpc);
            HttpTransportSE transport = new HttpTransportSE(endPoint);
            transport.call(soapAction, envelope);
            SoapObject object = (SoapObject) envelope.bodyIn;
            String result = object.getProperty(0).toString();
            myTextView.setText(result);
        } catch (Exception e) {
            if (e.getStackTrace() != null) {
                for (Object o : e.getStackTrace()) {
                    myTextView.setText(myTextView.getText() + "\n" + o.toString());
                }
            }
        }
    }
    //异步处理程序
    class AnsyTry extends AsyncTask<String, TextView, Double> {

        TextView te = null;

        public AnsyTry(TextView te) {
            super();
            this.te = te;
        }

        @Override
        protected Double doInBackground(String... params) {
            double dou = 0;
            dou = 100;
            searchFromWebService(te);
            publishProgress(te);
            return dou;
        }

        @Override
        protected void onPostExecute(Double result) {
            super.onPostExecute(result);
        }

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
        }

        @Override
        protected void onProgressUpdate(TextView... values) {
            super.onProgressUpdate(values);
        }

    }

}

相关推荐