Android appelle WebService


Introduction à cette section :

Après l'étude précédente, la demande de données, l'analyse des données, le téléchargement et le téléchargement de fichiers, etc., nous devrions être en mesure de répondre aux exigences de base pour interagir avec le serveur. demande, et cette section vous présentera l'appel WebService d'Android. En fait, cette chose est quelque peu similaire à certaines des méthodes qui nous sont proposées. Plateforme de données pour les services API de données brutes, telles que les données agrégées ! WebService utilise XML et SOAP, via le protocole HTTP Vous pouvez compléter l'interaction avec la machine distante ! Bon, sans plus tarder, commençons cette section~


Introduction au WebService

1.png

PS : Si vous lisez le ci-dessus introduction Si ce n’est pas encore clair, oubliez ça, l’entreprise utilisait déjà C# pour construire un WebService ! Dans cette section, nous n'expliquons pas comment créer un WebService. Nous savons uniquement comment obtenir les services fournis par WebService. Analysez ensuite les données XML renvoyées, puis affichez les données pertinentes sur notre appareil Android !


2. Où obtenir le service WebService

Il existe de nombreux sites sur Internet qui fournissent WebService. Trouvez d'abord ces sites, puis obtenez le service correspondant ! Nous choisissons ici WebXml et Yunju 36wu comme exemples pour vous expliquer leur site officiel :

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

Auparavant, c'était gratuit, mais il est devenu commercialisé et de nombreux services sont payants, mais vous pouvez l'essayer ~ Le site propose 16 services Web différents. Vous pouvez interroger les services correspondants et appeler différentes interfaces selon vos propres besoins !

Pages associées de webXml :

2.jpg

Instructions sur les temps d'utilisation associés :

< également disponible Il existe de nombreux services et de nombreuses applications mobiles utilisent l'interface ici, comme Rainbow Bus, la météo mobile, etc. Cependant, cela est également payant =-=, vous pouvez l'essayer, mais vous ne pouvez envoyer que 20 requêtes par heure ; Cliquez pour postuler et obtenez la clé ! Choisissez simplement l'un des deux

3.jpg

3. >Tout d'abord, si vous souhaitez appeler WebService sur la plateforme Android, vous devez vous appuyer sur une bibliothèque de classes tierce : ksoap2 Sur la plateforme Android, on utilise 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/ ! CommentUtiliser?tm=2

La Chine ne pourra peut-être pas y arriver. Voici deux liens vers Baidu Cloud que tout le monde peut télécharger :

Version 2.54  : ksoap2-android 2.54.jar

Version 3.30 : ksoap2-android 3.30.jar

Si heureusement vous pouvez saisir l'adresse de téléchargement du package jar, alors vous voir l'interface suivante :

5.jpg

6.jpg


4. Obtenez quelques paramètres associés

. Recherchez d'abord le service que nous devons obtenir, puis enregistrez les paramètres pertinents : NameSpace (espace de noms), SoapAction et URL Inutile de dire que d'autres paramètres sont trouvés comme ceci :

7.jpg

Par exemple, ce que nous recherchons ici est le paramètre de requête météo. Cliquez dedans et nous pouvons voir un tel document de paramètre : .

8.png

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

9.png

Copiez d'abord le SoapAction et le NameSpace encadrés ! Bien sûr on peut le tester sur cette page, et en plus Nous sommes des utilisateurs gratuits. Vous pouvez ignorer l'identifiant sans le remplir. Après l'avoir saisi, cliquez sur le bouton d'appel pour ouvrir une page comme celle-ci :

11.png

Hé, voici l'identifiant. a renvoyé XML, et nous voulons Ce que nous faisons, c'est analyser un tel XML De plus, ici. .gif représente l'icône météo !

De même, regardons SoapAction, NameSpace et la marque des paramètres associés pour la requête de propriété !

12.png

et les données XML renvoyées  :

15.png


5. Inscrivez-vous et activez services WEB associés

16.jpg

17.jpg

18.png

Cliquez sur Mon serveur Web, puis sur Essai. WebXML nous offre un essai gratuit de cinq jours. Démarrons les deux serveurs dont nous avons besoin !

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


6. Exemple de code pour appeler WebService

Eh bien, écrivons le code pour vérifier le processus d'appel WebService :

Rendu des opérations:

19.png

PS : Ce numéro est le numéro précédent =-=, n'essayez pas de l'appeler, a été remplacé~ De plus, le service météo semble avoir des problèmes d'écriture, et parfois il ne peut pas être obtenu. Cela est probablement dû à certaines limitations de WebXml. Après tout, essayez-le...

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


}

De plus, n'oubliez pas d'importer le package et les autorisations Internet !


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

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


Cette section Résumé :

D'accord, cette section explique comment utiliser ce WebService côté Android. Apprenons-en un dans la section suivante. Un contrôle Android similaire à un navigateur - WebView, alors restez à l'écoute~Merci~ !