Android が WebService を呼び出す
このセクションの概要:
以前の学習、データリクエスト、データ分析、ファイルのアップロードとダウンロードなどの後、サーバーと対話するための基本的な要件を満たすことができるはずです。 このセクションでは、Android が WebService を呼び出す方法を紹介します。実際、これは、提供されているメソッドの一部と似ています。 集約データなどの生データAPIサービスのデータプラットフォーム! WebService は HTTP プロトコル経由で XML と SOAP を使用します リモート マシンとの対話を完了できます。さて、早速、このセクションを始めましょう~
WebService の紹介
PS: 上記の紹介を読んでもよくわからない場合は、忘れてください。同社は以前に C# を使用して WebService を構築していました。 このセクションでは、WebService の構築方法については説明しません。WebService によって提供されるサービスを取得する方法のみがわかります。 次に、返された XML データを解析し、関連するデータを Android デバイスに表示します。
2. WebService はどこで入手できますか? インターネット上には WebService を提供するサイトがたくさんあります。まず、これらのサイトを見つけて、対応するサービスを入手してください。 ここでは、説明する例として WebXml と Yunju 36wu を選択します。公式 Web サイト:
webXml: http://www.webxml.com.cn/zh_cn/index.aspx
無料ですが、すべて商用化されており、多くのサービスは有料ですが、試してみることができます〜 このサイトでは 16 の異なる Web サービスが提供されており、必要に応じて対応するサービスをクエリしたり、さまざまなインターフェイスを呼び出すことができます。webXml関連ページ
:
関連利用時間のご案内:
Yunju 36wu同じですレインボーバス、モバイル天気など、多くのモバイルアプリもここのインターフェイスを使用しています。 ただし、これも有料です =-= 試してみることはできますが、1 時間に送信できるリクエストは 20 件までです。 クリックして使用申請してキーを取得してください! 2 つのうちの 1 つを選択するだけです!3. サードパーティの jar パッケージの準備
まず、Android プラットフォームで WebService を呼び出す場合、サードパーティのクラス ライブラリ: ksoap2 に依存する必要があります。 Android プラットフォームでは、効率的で軽量な SOAP 開発パッケージである ksoap2 Android が使用されます。
jar パッケージのダウンロード アドレス:
https://code.google.com/p/ksoap2-android/wiki/HowToUse ?tm=2
Celestial Diana は利用できない場合があります。ここに誰でもダウンロードできる Baidu Cloud への 2 つのリンクがあります:
2.54 バージョン: ksoap2-android 2.54.jar
3.30 バージョン: ksoap2-android 3.30.jar
jar パッケージのダウンロード アドレスを入力できた場合は、次のインターフェイスが表示されます:
4. まず、関連パラメータを取得します
サービスを取得し、関連するパラメータを記録します: NameSpace (名前空間)、SoapAction、URL 言うまでもなく、他のパラメータは次のように見つけることができます:
たとえば、ここで探しているのは天気クエリ パラメータです。[Going in] をクリックすると、そのようなパラメータ ドキュメントが表示されます:
たとえば、ここで必要なのは天気クエリ パーツの関数です:
まず、フレーム化された SoapAction と NameSpace をコピーします。もちろん、このページでテストすることもできますが、さらに 私たちは無料ユーザーです。ID は入力せずにスキップできます。入力後、呼び出しボタンをクリックすると、次のようなページが開きます。
返された XML は次のとおりです。さらに、このような XML を解析します。 .gif は天気アイコンを表します。
同様に、所有権クエリの SoapAction、NameSpace、および関連するパラメーター マークを見てみましょう。
と返された XML データ :
5. 関連する WEB サービスを登録して有効にします
「My Web Server」をクリックし、「Trial」をクリックします。WebXML は 5 日間の無料トライアルを提供します。 必要な 2 つのサーバーを起動しましょう。
わかりました、自分のキーを忘れずにマークしてください~
6. WebService を呼び出すコード例
それでは、WebService を呼び出すプロセスを検証するコードを書いてみましょう:
レンダリングの実行:
PS:この番号は前の番号 =-= です。電話をかけないでください。置き換えられています~ また、気象サービスは書き込みに問題があるようで、WebXml の制限により取得できない場合があります。 結局のところ、試してみてください...
コードを実装します:
public class MainActivity extends AppCompatActivity implements View.OnClickListener { private EditText edit_param; private Button btn_attribution; private Button btn_weather; private TextView txt_result; private String city; private String number; private String result; //定义获取手机信息的SoapAction与命名空间,作为常量 private static final String AddressnameSpace = "http://WebXml.com.cn/"; //天气查询相关参数 private static final String Weatherurl = "http://webservice.webxml.com.cn/WebServices/WeatherWS.asmx"; private static final String Weathermethod = "getWeather"; private static final String WeathersoapAction = "http://WebXml.com.cn/getWeather"; //归属地查询相关参数 private static final String Addressurl = "http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx"; private static final String Addressmethod = "getMobileCodeInfo"; private static final String AddresssoapAction = "http://WebXml.com.cn/getMobileCodeInfo"; //定义一个Handler用来更新页面: private Handler handler = new Handler() { public void handleMessage(Message msg) { switch (msg.what) { case 0x001: txt_result.setText("结果显示:\n" + result); Toast.makeText(MainActivity.this, "获取天气信息成功", Toast.LENGTH_SHORT).show(); break; case 0x002: txt_result.setText("结果显示:\n" + result); Toast.makeText(MainActivity.this, "号码归属地查询成功", Toast.LENGTH_SHORT).show(); break; } } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); bindViews(); } private void bindViews() { edit_param = (EditText) findViewById(R.id.edit_param); btn_attribution = (Button) findViewById(R.id.btn_attribution); btn_weather = (Button) findViewById(R.id.btn_weather); txt_result = (TextView) findViewById(R.id.txt_result); btn_attribution.setOnClickListener(this); btn_weather.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.btn_weather: new Thread() { @Override public void run() { getWether(); } }.start(); break; case R.id.btn_attribution: new Thread(new Runnable() { public void run() { getland(); } }).start(); break; } } //定义一个获取某城市天气信息的方法: public void getWether() { result = ""; SoapObject soapObject = new SoapObject(AddressnameSpace, Weathermethod); soapObject.addProperty("theCityCode:", edit_param.getText().toString()); soapObject.addProperty("theUserID", "dbdf1580476240458784992289892b87"); SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); envelope.bodyOut = soapObject; envelope.dotNet = true; envelope.setOutputSoapObject(soapObject); HttpTransportSE httpTransportSE = new HttpTransportSE(Weatherurl); System.out.println("天气服务设置完毕,准备开启服务"); try { httpTransportSE.call(WeathersoapAction, envelope); // System.out.println("调用WebService服务成功"); } catch (Exception e) { e.printStackTrace(); // System.out.println("调用WebService服务失败"); } //获得服务返回的数据,并且开始解析 SoapObject object = (SoapObject) envelope.bodyIn; System.out.println("获得服务数据"); result = object.getProperty(1).toString(); handler.sendEmptyMessage(0x001); System.out.println("发送完毕,textview显示天气信息"); } //定义一个获取号码归属地的方法: public void getland() { result = ""; SoapObject soapObject = new SoapObject(AddressnameSpace, Addressmethod); soapObject.addProperty("mobileCode", edit_param.getText().toString()); soapObject.addProperty("userid", "dbdf1580476240458784992289892b87"); SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); envelope.bodyOut = soapObject; envelope.dotNet = true; envelope.setOutputSoapObject(soapObject); HttpTransportSE httpTransportSE = new HttpTransportSE(Addressurl); // System.out.println("号码信息设置完毕,准备开启服务"); try { httpTransportSE.call(AddresssoapAction, envelope); //System.out.println("调用WebService服务成功"); } catch (Exception e) { e.printStackTrace(); //System.out.println("调用WebService服务失败"); } //获得服务返回的数据,并且开始解析 SoapObject object = (SoapObject) envelope.bodyIn;//System.out.println("获得服务数据"); result = object.getProperty(0).toString();//System.out.println("获取信息完毕,向主线程发信息"); handler.sendEmptyMessage(0x001); //System.out.println("发送完毕,textview显示天气信息"); } }
また、パッケージとインターネット権限をインポートすることを忘れないでください。
リファレンスコードのダウンロード:
WebServiceDemo.zip: WebServiceDemo.zipをダウンロード
このセクションの概要:
さて、このセクションではここまでで、Android 側でこの WebService を使用する方法を説明します。次は1つのセクションで学習しましょう ブラウザに似た Android コントロール - WebView をご期待ください~ありがとう~!