記事のディレクトリ
このブログは、AndroidコールWCFサービスの簡単な例です。
例
この例では、AndroidとWCFとの相互作用についての一例として、WCFインターフェイスの簡単な通知を作成します。
まず、この方法は、テスト中のCreateNotice WcfTestClient WCFインターフェイスを使用することができ、Javaは私がWCFのブログを呼んでパートを参照することができます。
次のように新しいWCFServiceは、WCFツールクラスを呼び出します
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
|
パッケージ com.carlos.wcf。
輸入 android.os.Handler。 輸入 android.os.Message。
輸入 org.ksoap2.SoapEnvelope。 輸入 org.ksoap2.serialization.SoapObject; 輸入 org.ksoap2.serialization.SoapSerializationEnvelope。 輸入 org.ksoap2.transport.HttpTransportSE; 輸入 org.xmlpull.v1.XmlPullParserException。
インポートにjava.io.IOException; インポートするjava.util.Iterator; 輸入 java.util.Map; 輸入 java.util.concurrent.ExecutorService。 輸入 java.util.concurrent.Executors。
パブリック・ クラス { 公共の静的な最終文字列WCF_URL = 「」 ; 、パブリック静的最終的な文字列の名前空間= 「」 ; パブリック静的最終 SOAP文字列= 「」 ; プライベート静的最終 ExecutorServiceのExecutorServiceの= Executors.newFixedThreadPoolを(3);
パブリック静的な無効callWCFService (最終文字列methodNameの、マッププロパティ、最終 WCFServiceCallBack wcfServiceCallBack) { 決勝を HttpTransportSE httpTransportSE = 新新 HttpTransportSE(WCF_URL); SoapObject soapObject = 新新 SoapObject(NAMESPACE、methodNameの); IF(=プロパティ!
NULL){ ため。it.hasNext();(それはproperties.entrySet(=イテレータ<のMap.Entry <文字列オブジェクト>>)反復子()){ のMap.Entry <文字列、オブジェクト>エントリ= it.nextは( ); soapObject.addProperty(entry.getKey()、entry.getValue())。 } }
最終 SoapSerializationEnvelopeたSOAPEnvelope = 新しい新 ; SoapSerializationEnvelope(SoapEnvelope.VER11) soapEnvelope.bodyOut = soapObjectを; soapEnvelope.setOutputSoapObject(soapObject ); soapEnvelope.dotNet = trueに、 httpTransportSE.debug = trueに。
最終ハンドラmHandler = 新しい新しいハンドラ(){ 公共ボイドのhandleMessage (メッセージMSG) { スーパー .handleMessage(MSG); wcfServiceCallBack.callBack ((SoapObject)msg.obj); } }; ExecutorService.submitを(新しい新しい Runnableを(){ 公共ボイドRUN () { SoapObject resultSoapObject = NULL ; 試み { httpTransportSE.call(methodNameの+ SOAP、たSOAPEnvelope ); IF
(!soapEnvelope.getResponse()= NULL){ resultSoapObject =(SoapObject)soapEnvelope.bodyIn; } } キャッチ(IOExceptionをE){ e.printStackTrace(); } キャッチ(XmlPullParserException E){ e.printStackTrace(); } 最後に { mHandler.sendMessage(mHandler.obtainMessage(0 ;、resultSoapObject)) } } ;}) }
パブリックインターフェイスWCFServiceCallBack { 公共ボイドCALLBACK (SoapObject結果) ; } }
|
結果をプリントアウトするために、このメソッドを呼び出すMainActivityクラスは、WCFを返さ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
|
package com.carlos.wcf;
import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.Toast;
import org.ksoap2.serialization.SoapObject;
import java.util.HashMap;
public class MainActivity extends AppCompatActivity {
private Button b_get_WCFResult; private final static String TAG="WCFResult";
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);
b_get_WCFResult= (Button) findViewById(R.id.b_get_WCFResult);
b_get_WCFResult.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { getWCFResult(); } });
}
private void getWCFResult(){ HashMap<String,Object> map=new HashMap<>(); map.put("title", "提醒"); map.put("content", "晚上写篇博客"); WCFService.callWCFService("CreateNotice", map, new WCFService.WCFServiceCallBack() { public void callBack(SoapObject result) { if(result!=null){ Toast.makeText(MainActivity.this,result.toString(),Toast.LENGTH_SHORT).show(); Log.i(TAG, result.toString());
SoapObject soapObject=(SoapObject)result.getProperty("result"); Log.i(TAG,soapObject.toString()); if(soapObject.toString().equals("anyType{}")){ Log.i(TAG,"没有结果"); }else{ for(int i=0;i<soapObject.getPropertyCount();i++){ Log.i("WCFResult",soapObject.getProperty(i).toString()); } }
} } }); } }
|
点击获取WCF结果的按钮后控制台输出的结果
原文:大专栏 Android调用WCF服务