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

1.png

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:

2.jpg

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 3.jpg

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:

5.jpg

6.jpg


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:

7.jpg

Sebagai contoh, apa yang kami cari di sini ialah parameter pertanyaan cuaca Klik masuk dan kami boleh melihat dokumen parameter sedemikian:

8.png

Sebagai contoh, apa yang kita perlukan di sini ialah fungsi pertanyaan cuaca:

9.png

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:

11.png

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!

12.png

dan data XML yang dikembalikan :

15.png


5. Daftar dan Dayakan perkhidmatan WEB berkaitan

16.jpg

17.jpg

18.png

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:

19.png

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~!