Introduction à cette section :

Grâce aux leçons précédentes sur les requêtes de données, l'analyse de données, le téléversement/téléchargement de fichiers, etc., vous devriez maintenant avoir une compréhension de base de l'interaction avec des serveurs. Cette section présente l'appel de WebService depuis Android, ce qui est en fait assez similaire aux plateformes de données qui fournissent des services d'API de données brutes, telles que Juhe Data (聚combineData) ! WebService utilise XML et SOAP, et peut effectuer des interactions avec des machines distantes via le protocole HTTP ! Bon, sans plus tarder, commençons cette section~


1. Introduction à WebService

PS : Si vous n'êtes toujours pas clair après avoir lu l'introduction ci-dessus, alors oubliez ça. Auparavant, notre entreprise utilisait C# pour construire un WebService ! Dans cette section, nous ne discuterons pas de la façon de construire un WebService ; nous avons seulement besoin de savoir comment obtenir les services fournis par WebService, analyser les données XML renvoyées, puis afficher les données pertinentes sur notre appareil Android !


2. Où obtenir des services WebService

Il existe de nombreux sites web sur Internet qui fournissent des WebServices. Tout d'abord, trouvez ces sites, puis obtenez les services correspondants ! Ici, nous choisissons WebXml et Yunju 36wu comme exemples pour expliquer à tout le monde. Leurs sites officiels :

webXml:http://www.webxml.com.cn/zh_cn/index.aspx

Ils étaient autrefois gratuits, mais ils sont tous devenus commercialisés maintenant. De nombreux services nécessitent un paiement, mais vous pouvez les essayer. Ce site propose 16 services web différents. Vous pouvez rechercher les services correspondants et appeler différentes interfaces selon vos besoins !

Pages liées à webXml:

Description des compteurs d'utilisation associés:

Yunju 36wu:http://www.36wu.com/Service

Il fournit également de nombreux services. De nombreuses applications mobiles utilisent les interfaces ici, comme Rainbow Bus, Mobile Weather, etc. Cependant, celui-ci aussi facture des frais =-=, mais vous pouvez l'essayer. Toutefois, vous ne pouvez envoyer que 20 requêtes par heure ; cliquez pour demander l'utilisation, obtenez la clé, et c'est terminé ! Choisissez l'un ou l'autre !


3. Préparation des paquets JAR tiers

Tout d'abord, si vous souhaitez appeler un WebService sur la plateforme Android, vous devez vous appuyer sur la bibliothèque tierce : ksoap2. Sur la plateforme Android, nous utilisons ksoap2 Android, un package de développement SOAP efficace et léger !

Adresse de téléchargement du package JAR :https://code.google.com/p/ksoap2-android/wiki/HowToUse?tm=2

Il se peut qu'il ne soit pas accessible en Chine. Ici, nous fournissons deux liens Baidu Cloud pour que tout le monde puisse le télécharger :

Version 2.54:

Version 3.30:

Si vous avez la chance d'accéder à l'adresse de téléchargement du JAR, vous verrez l'interface suivante :


4. Obtention de quelques paramètres associés

Tout d'abord, trouvez le service que nous devons obtenir, puis notez les paramètres concernés :NameSpace(Namespace),SoapActionainsi queURLCela va sans dire. Les autres paramètres se trouvent comme ceci :

Par exemple, ce que nous recherchons ici, ce sont les paramètres de requête météo. En cliquant, nous pouvons voir un document de paramètres comme ceci :

Par exemple, ici ce dont nous avons besoin est la fonctionnalité de requête météo :

Tout d'abord, copiez le SoapAction et le NameSpace qui sont entourés ! Bien sûr, nous pouvons tester sur cette page. De plus, comme nous sommes des utilisateurs gratuits, l'id peut être laissé vide et ignoré directement. Après avoir saisi, cliquez sur le bouton Invoke et une page comme celle-ci s'ouvrira :

Héhé, voici le XML retourné, et ce que nous devons faire est d'analyser un tel XML. De plus, le .gif ici représente l'icône météo !

De même, notons également le SoapAction, le NameSpace et les paramètres associés pour la requête de localisation du numéro de téléphone !

Ainsi que les données XML retournées:


5. Enregistrement et activation des services Web associés

Cliquez sur "My Web Server", puis cliquez sur "Try It". WebXml nous offre un essai gratuit de cinq jours. Activons les deux serveurs dont nous avons besoin !

D'accord, n'oubliez pas de noter notre propre clé~


6. Exemples de code pour appeler WebService

Bien, ensuite, écrivons du code pour vérifier le processus d'appel de WebService :

Capture d'écran du résultat d'exécution:

PS : Ce numéro est un ancien numéro =-=, n'essayez pas de l'appeler ; quelqu'un d'autre l'a maintenant. De plus, le service météo semble avoir quelques problèmes ; parfois il est impossible de l'obtenir. Probablement à cause de certaines restrictions imposées par WebXml. Après tout, ce n'est qu'un essai...

Code d'implémentation:

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显示天气信息");
    }


}

Aussi, n'oubliez pas d'importer le package et la permission Internet !

<uses-permission android:name="android.permission.INTERNET"/>

Téléchargement du code de référence :

WebServiceDemo.zip:Télécharger WebServiceDemo.zip


Résumé de cette section :

Très bien, cette section sur la façon d'utiliser WebService côté Android se termine ici. Dans la prochaine section, nous allons découvrir un composant Android similaire à un navigateur—WebView. Restez à l'écoute~ Merci~ !