第104章、AndroidアクセスWebService(ゼロからAndroidを学ぶ)

8962 ワード

天気予報、携帯電話のホーム検索……、SQL SERVERデータベースとのリモートインタラクションも含めてWeb Serviceで済ませられます.
準備:
(1)最初のステップは、Android locSDK 3.3をダウンロードします.ダウンロード先:http://ksoap2-android.googlecode.com/svn/m2-repo/com/google/code/ksoap2-android/ksoap2-android-assembly/2.6.0/ksoap2-android-assembly-2.6.0-jar-with-dependencies.jar 
(2)ステップ2、拡張子zipをjarに変更
ダウンロード後、ファイル名はksoap 2-android-assembly-2.6.0-jar-with-dependencies.zip
ksoap 2-android-assembly-2.6.0-jar-with-dependencies.jarに変更してください.
第104章、Android访问WebService(从零开始学Android)_第1张图片準備作業はこれで終了しました.
 
一、工程配置
1、第一歩は、プロジェクトにlibsフォルダを新規作成し、開発パッケージのksoap 2-android-assembly-2.6.0-jar-with-dependencies.jarをlibsルートディレクトリにコピーし、コピーが完了したプロジェクトディレクトリを下図に示す.
  
2、ステップ2:エンジニアリングプロパティ->Java Build Path->Librariesで「Add External JARs」を選択し、ksoap 2-android-assembly-2.6.0-jar-with-dependencies.jarを選択し、決定して戻ります.
以上の2つのステップで、Webサービスの機能を正常に使用できます.
二、設計インタフェース
1、レイアウトファイル
res/layout/activityを開くmain.xmlファイル.次のコードを入力します.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <EditText
        android:id="@+id/mobile"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="phone" >

        <requestFocus />
    </EditText>

    <Button
        android:id="@+id/search"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="       " />

    <TextView
        android:id="@+id/location"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="25sp" />

</LinearLayout>

三、プログラムファイル
1、MainActivity.java「src/com.genwoxue.baidulocation/MainActivity.java」ファイルを開きます.次に、次のコードを入力します.
package com.genwoxue.webservice;


import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
import android.app.Activity;  
import android.os.AsyncTask;
import android.os.Bundle;  
import android.view.View;  
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;  
import android.widget.TextView;  
  
public class MainActivity extends Activity {  
    private EditText etMobile=null;  
    private TextView tvLocation=null; 
    private Button btnSearch=null;
    
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.activity_main);  
        etMobile = (EditText) findViewById(R.id.mobile);  
        tvLocation = (TextView) findViewById(R.id.location);  
        btnSearch=(Button)super.findViewById(R.id.search);
        btnSearch.setOnClickListener(new OnClickListener(){
        	@Override
        	public void onClick(View view){
        		String mobile = etMobile.getText().toString();  
        		PageTask task = new PageTask();      
    			task.execute(mobile);    
    	   }
       });
    }  
      
      
    /*     :
	 * (1)onPreExecute(),     ,    UI  ,
	 *               ,           。
	 * (2)doInBackground(Params...),                ,
	 * doInBackground(Params...) AsyncTask   ,       。
	 *            publishProgress(Progress...)        。
	 * (3)onProgressUpdate(Progress...),   UI  。  
	 *  doInBackground(Params...)     publishProgress(Progress...),  
	 *       。                       。
	 * (4)onPostExecute(Result),   UI  ,              ,  
	 *   doInBackground(Params...)    。         ,  Result 
	 * null          (         )。	 * 
	 */
	class PageTask extends AsyncTask<String, Integer, String> {    
		// (1)    
		@Override        
		protected void onPreExecute() {     
			tvLocation.setText("task_started");        
		}  
		
		//(2)    :         (  WebService        )
		@Override          
		protected String doInBackground(String... params) {   
			String result = null;
			//       
	        String nameSpace = "http://WebXml.com.cn/";  
	        //          
	        String methodName = "getMobileCodeInfo";  
	        // EndPoint  
	        String endPoint = "http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx";  
	        // SOAP Action  
	        String soapAction = "http://WebXml.com.cn/getMobileCodeInfo";  
	  
	        //   WebService              
	        SoapObject rpc = new SoapObject(nameSpace, methodName);  
	  
	        //      WebService           mobileCode、userId  
	        rpc.addProperty("mobileCode", params[0]);  
	        rpc.addProperty("userId", "");  
	  
	        //     WebService   SOAP    ,   SOAP     
	        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER12);  
	  
	        envelope.bodyOut = rpc;  
	        //         dotNet   WebService  
	        envelope.dotNet = true;  
	        //    envelope.bodyOut = rpc;  
	        envelope.setOutputSoapObject(rpc);  
	  
	        HttpTransportSE transport = new HttpTransportSE(endPoint);  
	        try {  
	            //   WebService  
	            transport.call(soapAction, envelope);  
	        } catch (Exception e) {  
	            e.printStackTrace();  
	        }  
	  
	        //          
	        SoapObject object = (SoapObject) envelope.bodyIn;  
	        //          
	        result = object.getProperty(0).toString();
	        return result;
		}          
		
		
		//(3) doInBackground  publishProgress(Progress...)  onProgressUpdate    
		@Override       
		protected void onProgressUpdate(Integer... values) {      
			//                 
			tvLocation.setText("     ……"+values[0]);    
		}      
				
		//(4)              ,    doInBackground(Params...)    。
		@Override     
		protected void onPostExecute(String result) {    
			//   HTML                   
			tvLocation.setText(result);       
		}  
		
	}   
}

四、プロファイル「AndroidManifest.xml」ファイルを開く.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.genwoxue.webservice"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="10"
        android:targetSdkVersion="15" />
    <uses-permission android:name="android.permission.INTERNET"/>
    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity
            android:name=".MainActivity"
            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>

注意:WebServiceを呼び出すため、AndroidManifest.xmlにインターネット権限が追加されていることに注意してください.
   
五、運行結果