Android memanggil WebService
Pengenalan kepada bahagian ini:
Selepas kajian terdahulu, permintaan data, analisis data, muat naik dan muat turun fail, dsb., kita seharusnya dapat memenuhi keperluan asas untuk berinteraksi dengan pelayan. permintaan, dan bahagian ini memperkenalkan Android untuk memanggil WebService Sebenarnya, perkara ini agak serupa dengan beberapa kaedah yang diberikan kepada kami. Platform data untuk perkhidmatan API data mentah, seperti data agregat! WebService menggunakan XML dan SOAP, melalui protokol HTTP Anda boleh melengkapkan interaksi dengan mesin jauh! Baiklah, tanpa berlengah lagi, mari kita mulakan bahagian ini~
Pengenalan kepada WebService
PS: Jika anda membaca pengenalan di atas Jika masih belum jelas, lupakan sahaja, syarikat itu menggunakan C# untuk membina WebService sebelum ini! Dalam bahagian ini kami tidak membincangkan cara membina WebService. Kami hanya tahu cara mendapatkan perkhidmatan yang disediakan oleh WebService. Kemudian huraikan data XML yang dikembalikan, dan kemudian paparkan data yang berkaitan pada peranti Android kami!
2. Di mana untuk mendapatkan perkhidmatan WebService
Terdapat banyak tapak di Internet yang menyediakan WebService Mula-mula cari tapak ini dan kemudian dapatkan perkhidmatan yang sepadan! Di sini kami memilih WebXml dan Yunju 36wu sebagai contoh untuk menerangkan kepada anda tapak web rasmi mereka:
webXml: http://www.webxml.com.cn/zh_cn/index. .aspx
Dulu percuma tapi dah dikomersialkan dan banyak servis kena caj tapi boleh cuba~ Tapak ini menyediakan 16 perkhidmatan Web yang berbeza Anda boleh menanyakan perkhidmatan yang sepadan dan memanggil antara muka yang berbeza mengikut keperluan anda sendiri!
Halaman berkaitan webXml:
Arahan tentang masa penggunaan yang berkaitan:
< juga tersedia Terdapat banyak perkhidmatan dan banyak aplikasi mudah alih menggunakan antara muka di sini, seperti Rainbow Bus, cuaca mudah alih, dsb. Walau bagaimanapun, ini juga dikenakan bayaran =-=, anda boleh mencubanya, tetapi anda hanya boleh menghantar 20 permintaan dalam satu jam; Klik untuk memohon dan dapatkan kuncinya! >Pertama sekali, jika anda ingin memanggil WebService pada platform Android, anda perlu bergantung pada perpustakaan kelas pihak ketiga: ksoap2 Pada platform Android, ksoap2 Android digunakan, pakej pembangunan SOAP yang cekap dan ringan
alamat muat turun pakej jar:https://code.google.com/p/ksoap2 -android/wiki/ HowToUse?tm=2
China mungkin tidak dapat ke sana. Berikut ialah dua pautan ke Baidu Cloud untuk dimuat turun oleh semua orang:
versi 2.54 : ksoap2-android 2.54.jar
Versi 3.30: ksoap2-android 3.30.jar
Jika bernasib baik anda boleh memasukkan alamat muat turun pakej jar, maka anda akan lihat Antara Muka berikut:
4 Dapatkan beberapa parameter yang berkaitan
Mula-mula Cari perkhidmatan yang perlu kami dapatkan, dan kemudian rekodkan parameter yang berkaitan: NameSpace (ruang nama), SoapAction dan URL Tidak perlu dikatakan lagi, parameter lain ditemui seperti ini:
Sebagai contoh, apa yang kami cari di sini ialah parameter pertanyaan cuaca Klik masuk dan kami boleh melihat dokumen parameter sedemikian:
Sebagai contoh, apa yang kita perlukan di sini ialah fungsi pertanyaan cuaca:
Salin SoapAction dan NameSpace berbingkai dahulu! Sudah tentu kita boleh mengujinya di halaman ini, dan sebagai tambahan Kami adalah pengguna percuma. Anda boleh melangkau ID tanpa mengisinya. Selepas memasukkannya, klik butang panggilan untuk membuka halaman seperti ini:
Hei, inilah mengembalikan XML, dan kami mahu Apa yang kami lakukan ialah menghuraikan XML seperti itu, di sini .gif mewakili ikon cuaca!
Begitu juga, mari lihat SoapAction, NameSpace dan tanda parameter yang berkaitan untuk pertanyaan pemilikan!
dan data XML yang dikembalikan :
5. Daftar dan Dayakan perkhidmatan WEB berkaitan
Klik Pelayan Web Saya, kemudian klik Percubaan WebXML memberikan kami percubaan percuma selama lima hari. Mari mulakan dua pelayan yang kita perlukan!
Baiklah, ingat untuk menandai kunci kita sendiri~
6 Contoh kod untuk memanggil WebService
Nah, mari tulis kod untuk mengesahkan proses WebService:
Penyampaian operasi:
PS: Nombor ini ialah nombor sebelumnya =-=, jangan cuba menghubunginya , telah diganti~ Di samping itu, perkhidmatan cuaca nampaknya mengalami masalah penulisan, dan kadangkala ia tidak dapat diperolehi Ia mungkin disebabkan oleh beberapa batasan WebXml. Lagipun, cubalah...
Kod pelaksanaan:
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显示天气信息"); } }
Selain itu, jangan lupa mengimport pakej dan kebenaran Internet!
Muat turun kod rujukan:
WebServiceDemo.zip: Muat turun WebServiceDemo.zip
Bahagian ini Ringkasan:
Baiklah, bahagian ini menerangkan cara menggunakan WebService ini di bahagian Android Mari kita pelajari satu di bahagian seterusnya. Kawalan Android serupa dengan pelayar - WebView, jadi nantikan~Terima kasih~!