Maison Java javaDidacticiel Analyse de l'instance de service Web d'appel Android

Analyse de l'instance de service Web d'appel Android

Jan 24, 2017 am 10:07 AM

L'exemple de cet article décrit comment Android appelle WebService. Partagez-le avec tout le monde pour votre référence. Les détails sont les suivants :

WebService est un standard d'appel à distance basé sur le protocole SOAP. Grâce au webservice, différentes plates-formes de systèmes d'exploitation, différents langages et différentes technologies peuvent être intégrés. Il n'existe pas de bibliothèque pour appeler WebService dans le SDK Android, vous devez donc utiliser un SDK tiers pour appeler WebService. La version PC des bibliothèques client WEbservice est très riche, comme Axis2, CXF, etc., mais ces kits de développement sont trop volumineux pour le système Android et peuvent ne pas être facilement transplantés sur le système Android. Par conséquent, ces kits de développement n’entrent pas dans le cadre de notre considération. Il existe des SDK pour les clients WebService adaptés aux téléphones mobiles. Le plus couramment utilisé est Ksoap2, qui peut être téléchargé à partir de http://code.google.com/p/ksoap2-android/downloads/list téléchargé ; Le package -assembly-2.4 -jar-with-dependencies.jar est copié dans le répertoire lib du projet Eclipse. Bien entendu, il peut également être placé dans d'autres répertoires. En même temps, référencez ce package jar dans le projet Eclipse.

Le code Java est le suivant :

package com.arg;
import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.Iterator; 
import java.util.List; 
import java.util.Map; 
import java.util.Map.Entry; 
import android.app.Activity; 
import android.app.ProgressDialog; 
import android.os.Bundle; 
import android.os.Handler; 
import android.os.Message; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.ListView; 
import android.widget.SimpleAdapter; 
public class CallWebServiceActivity extends Activity {
  //显示结果的listview 
  ListView listView=null; 
  //输入文本框 
  EditText provinceEdit=null; 
  //用于存放数据的集合list 
  List<Map<String, Object>> data=null; 
  //提示对话框 
  ProgressDialog myDialog=null; 
  //搜索按钮 
  Button searchButton=null; 
 /** Called when the activity is first created. */
 @Override
 public void onCreate(Bundle savedInstanceState) { 
  super.onCreate(savedInstanceState); 
  setContentView(R.layout.main); 
  //获得文本输入框 
  provinceEdit=(EditText) this.findViewById(R.id.provinceEdit); 
  //获得搜索按钮
  searchButton=(Button) this.findViewById(R.id.searchButton);
  //为搜索按钮添加单击监听事件 
  searchButton.setOnClickListener(new OnClickListener(){
    public void onClick(View v) { 
     //响应按钮单击事件的函数 
     ResponseOnClick(); 
    }
  });
 }
 //响应按钮单击事件的函数 
 public void ResponseOnClick(){ 
  //创建一个线程 
  HttpThread thread=new HttpThread(handler); 
  //构造请求参数 
  HashMap <String ,Object> params=new HashMap<String ,Object>(); 
  try{ 
   CharSequence etValue=provinceEdit.getText(); 
   String name=""; 
   if(etValue!=null){ 
    //字符转码 
    name=new String(etValue.toString().getBytes(),"UTF-8");
   } 
   params.put("byProvinceName", name); 
  }catch(Exception ex){ 
   ex.printStackTrace(); 
  } 
  // 
  String url="http://webservice.webxml.com.cn/WebServices/WeatherWebService.asmx"; 
  // String url = "http://webservice.webxml.com.cn/WebServices/WeatherWebService.asmx"; 
  String nameSpace = "http://WebXml.com.cn/"; 
  String methodName = "getSupportCity"; 
  // 开始新线程进行WebService请求 
  thread.doStart(url, nameSpace, methodName, params); 
 } 
 /** 
 * 捕获消息队列 
 * 
 */
 Handler handler=new Handler(){ 
  public void handleMessage(Message m){ 
   ArrayList <String> myList=(ArrayList<String>)m.getData().getStringArrayList("data"); 
   if(myList !=null){ 
    if(data !=null){ 
     data.clear(); 
    }else{ 
     data=new ArrayList<Map <String, Object>>(); 
    } 
    for(int i=0;i<myList.size();i++){ 
     Map<String, Object> item=new HashMap<String, Object>(); 
     item.put("text", myList.get(i)); 
     data.add(item); 
    } 
    /** 
    * 列表显示 
    * 
    */
    SimpleAdapter simpleAdapter=new SimpleAdapter(CallWebServiceActivity.this
    ,data,R.layout.listlayout,new String[] {"text"},new int []{R.id.showData}); 
    listView=(ListView) findViewById(R.id.showListView); 
    listView.setAdapter(simpleAdapter); 
   } 
  } 
 }; 
 /** 
 * 线程类 
 * @author Administrator 
 * 
 */
 public class HttpThread extends Thread{ 
  private Handler handle=null; 
  String url=null; 
  String nameSpace=null; 
  String methodName=null; 
  HashMap <String ,Object> params=null; 
  ProgressDialog progressDialog=null; 
  //构造函数 
  public HttpThread(Handler hander){ 
   handle=hander; 
  } 
  /** 
  * 启动线程 
  */
  public void doStart(String url, String nameSpace, String methodName, 
     HashMap<String, Object> params) {
    // TODO Auto-generated method stub 
   this.url=url; 
   this.nameSpace=nameSpace; 
   this.methodName=methodName; 
   this.params=params; 
   progressDialog=ProgressDialog.show(CallWebServiceActivity.this, "提示","正在请求请稍等……", true); 
   this.start(); 
   } 
  /** 
  * 线程运行 
  */
  @Override
  public void run() { 
   // TODO Auto-generated method stub 
   System.out.println("jack"); 
   super.run(); 
   try{ 
    //web service请求 
    SoapObject result=(SoapObject) CallWebService(); 
    //构造数据 
    ArrayList<String> list=null; 
    if(result !=null && result.getPropertyCount() > 0){ 
     list=new ArrayList<String>(); 
     for(int i=0;i<result.getPropertyCount();i++){ 
      SoapPrimitive value=(SoapPrimitive) result.getProperty(i); 
      list.add(value.toString());
     } 
     //a取消进度对话框 
     progressDialog.dismiss(); 
     //构造消息 
     Message message=handle.obtainMessage(); 
     Bundle b=new Bundle(); 
     b.putStringArrayList("data", list);
     message.setData(b); 
     handle.sendMessage(message); 
    }
   }catch(Exception ex){
    ex.printStackTrace();
   }finally{
   }
  }
  /** 
  * 请求web service 
  */
  protected Object CallWebService(){ 
   String SOAP_ACTION = nameSpace + methodName; 
   //创建SoapObject实例 
   SoapObject request=new SoapObject(nameSpace,methodName); 
   //生成调用web service方法的soap请求消息 
   SoapSerializationEnvelope envelope=new SoapSerializationEnvelope(SoapEnvelope.VER11); 
   //设置.net web service 
   envelope.dotNet=true; 
   //发送请求 
   envelope.setOutputSoapObject(request); 
   //请求参数 
   if(params != null && !params.isEmpty() ){ 
    for(Iterator it=params.entrySet().iterator();it.hasNext();){ 
     Map.Entry e=(Entry) it.next(); 
     request.addProperty(e.getKey().toString(),e.getValue()); 
    } 
   }
   //
   AndroidHttpTransport androidHttpTrandsport=new AndroidHttpTransport(url);
   SoapObject result=null;
   try{
    //web service请求
    androidHttpTrandsport.call(SOAP_ACTION, envelope); 
    //得到返回结果
    result=(SoapObject) envelope.getResponse();
   }catch(Exception ex){
    ex.printStackTrace();
   } 
   return result; 
  } 
 } 
}
Copier après la connexion

J'espère que cet article sera utile à la conception de la programmation Android de chacun.

Pour plus d'articles liés à l'analyse des instances de WebService d'appel Android, veuillez faire attention au site Web PHP chinois !

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Article chaud

Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Article chaud

Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Tags d'article chaud

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment fonctionne le mécanisme de chargement de classe de Java, y compris différents chargeurs de classe et leurs modèles de délégation? Comment fonctionne le mécanisme de chargement de classe de Java, y compris différents chargeurs de classe et leurs modèles de délégation? Mar 17, 2025 pm 05:35 PM

Comment fonctionne le mécanisme de chargement de classe de Java, y compris différents chargeurs de classe et leurs modèles de délégation?

Top 4 frameworks JavaScript en 2025: React, Angular, Vue, Svelte Top 4 frameworks JavaScript en 2025: React, Angular, Vue, Svelte Mar 07, 2025 pm 06:09 PM

Top 4 frameworks JavaScript en 2025: React, Angular, Vue, Svelte

Comment puis-je utiliser JPA (Java Persistance API) pour la cartographie relationnelle des objets avec des fonctionnalités avancées comme la mise en cache et le chargement paresseux? Comment puis-je utiliser JPA (Java Persistance API) pour la cartographie relationnelle des objets avec des fonctionnalités avancées comme la mise en cache et le chargement paresseux? Mar 17, 2025 pm 05:43 PM

Comment puis-je utiliser JPA (Java Persistance API) pour la cartographie relationnelle des objets avec des fonctionnalités avancées comme la mise en cache et le chargement paresseux?

Comment utiliser Maven ou Gradle pour la gestion avancée de projet Java, la création d'automatisation et la résolution de dépendance? Comment utiliser Maven ou Gradle pour la gestion avancée de projet Java, la création d'automatisation et la résolution de dépendance? Mar 17, 2025 pm 05:46 PM

Comment utiliser Maven ou Gradle pour la gestion avancée de projet Java, la création d'automatisation et la résolution de dépendance?

Node.js 20: Boosts de performances clés et nouvelles fonctionnalités Node.js 20: Boosts de performances clés et nouvelles fonctionnalités Mar 07, 2025 pm 06:12 PM

Node.js 20: Boosts de performances clés et nouvelles fonctionnalités

Iceberg: L'avenir des tables de Data Lake Iceberg: L'avenir des tables de Data Lake Mar 07, 2025 pm 06:31 PM

Iceberg: L'avenir des tables de Data Lake

Comment implémenter la mise en cache à plusieurs niveaux dans les applications Java à l'aide de bibliothèques comme la caféine ou le cache de goyave? Comment implémenter la mise en cache à plusieurs niveaux dans les applications Java à l'aide de bibliothèques comme la caféine ou le cache de goyave? Mar 17, 2025 pm 05:44 PM

Comment implémenter la mise en cache à plusieurs niveaux dans les applications Java à l'aide de bibliothèques comme la caféine ou le cache de goyave?

Spring Boot SnakeyAml 2.0 CVE-2022-1471 Issue fixe Spring Boot SnakeyAml 2.0 CVE-2022-1471 Issue fixe Mar 07, 2025 pm 05:52 PM

Spring Boot SnakeyAml 2.0 CVE-2022-1471 Issue fixe

See all articles