Android 访问WebService

简介: 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010046908/article/details/50503428         首先,WebService进年来的使用人数很多了,它可以是一套接口多端调用,返回的格式是JSON和XML。
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010046908/article/details/50503428

        首先,WebService进年来的使用人数很多了,它可以是一套接口多端调用,返回的格式是JSON和XML。在项目中使用的,可以分为如下的四个步骤:
   1.下载ksoap2-android-assembly-2.5.2-jar-with-dependencies.jar文件
   2.开始创建HttpTransportSE 对象
   3.使用Soap1.1的协议创建SoapSerializationEnvelope
   4.创建SoapObject对象
   5.设置与.NET提供的Web Service 保存更好的兼容
   6.调用Web Service
   7.处理返回结果,解析数据。

   下面是我的源码:

    (1)WebServiceUtil.java

 
 
import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;

/**
 * @className WebServiceUtil 的工具类
 * Created by lidong on 2016/1/11.
 */
public class WebServiceUtil {

    public static SoapObject getData(String service_url, final String service_ns, final String methodName){
        /**
         * 创建HttpTransportSE 对象
         */
        final HttpTransportSE  ht = new HttpTransportSE(service_url);
        ht.debug = true;
        /**
         * 使用Soap1.1的协议创建EEnvelope
         */
        final SoapSerializationEnvelope  envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
        /**
         *创建SoapObject对象
         */
        SoapObject soapObject = new SoapObject(service_ns,methodName);
        envelope.bodyOut =soapObject;
        /***
         * 设置与.NET提供的Web Service 保存更好的兼容
         */
        envelope.dotNet = true;
        FutureTask<SoapObject> task = new FutureTask<SoapObject>(new Callable<SoapObject>() {
            @Override
            public SoapObject call() throws Exception {
                //调用Web Service
                ht.call(service_ns+methodName,envelope);
                if (envelope.getResponse()!=null){
                    //获取服务器返回的结果
                    SoapObject result = (SoapObject) envelope.bodyIn;
                    return result;
                }
                return null;
            }
        });
        new Thread(task).start();
        try {
            return  task.get();
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }
        return  null;
    }

}
   (2).布局文件

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent"
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:showIn="@layout/activity_web_service_demo"
    tools:context="com.chni.lidong.androidtestdemo.webService.WebServiceDemo">

    <android.support.v7.widget.RecyclerView
        android:layout_margin="10dp"
        android:layout_height="match_parent"
        android:layout_width="match_parent"
        android:id="@id/recyclerView"/>
</RelativeLayout>
3. WebServiceDemo

 

 
 
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.View;

import com.chni.lidong.androidtestdemo.R;
import com.chni.lidong.androidtestdemo.webService.adapter.MyAdapter;
import com.chni.lidong.androidtestdemo.webService.model.CarType;
import com.google.gson.Gson;

import org.ksoap2.serialization.SoapObject;

/**
 * 访问WebService的demo
 */
public class WebServiceDemo extends AppCompatActivity {
    //WSDL文档中的命名空间
    private static final String nameSpace = "http://www.ichehang.com/";
    //WSDL文档中的URL
    private static final String endPoint = "http://app.ichehang.com/AppService.asmx";
    //调用的方法
    private static final String methodName = "GetBrandNew";
    private RecyclerView recyclerView;
    private CarType carType;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_web_service_demo);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                        .setAction("Action", null).show();
            }
        });

        SoapObject data = WebServiceUtil.getData(endPoint, nameSpace, methodName);
        Log.d("WebServiceDemo",data.getPropertyCount()+"      "+data.getProperty(0) + "");
        parseData( data);
        recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
        // 创建一个线性布局管理器
        LinearLayoutManager layoutManager = new LinearLayoutManager(this);
        // 设置布局管理器
        recyclerView.setLayoutManager(layoutManager);
        recyclerView.setAdapter(new MyAdapter(carType));
    }

    private void parseData(SoapObject data) {
         carType = new Gson().fromJson(data.getProperty(0).toString(), CarType.class);
    }
}
  4.MyAdapter.java 

 
 
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import com.chni.lidong.androidtestdemo.R;
import com.chni.lidong.androidtestdemo.webService.model.CarType;

/**
 * Created by Administrator on 2016/1/11.
 */
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder>   {
    private  CarType mDataset;

    public MyAdapter(CarType mDataset) {
        this.mDataset = mDataset;
    }

    @Override
    public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = View.inflate(parent.getContext(), R.layout.my_adapter_detail, null);
        // 创建一个ViewHolder
        ViewHolder holder = new ViewHolder(view);
        return holder;
    }

    @Override
    public void onBindViewHolder(MyAdapter.ViewHolder holder, int position) {
        holder.mTextView.setText(mDataset.getTable().get(position).getName());
        holder.mTextViewName.setText(mDataset.getTable().get(position).getImgname());
    }

    @Override
    public int getItemCount() {
        return mDataset.getTable().size();
    }

    public static class ViewHolder extends RecyclerView.ViewHolder
    {
        public TextView mTextView;
        public TextView mTextViewName;
        public ViewHolder(View itemView)
        {
            super(itemView);
            mTextView = (TextView) itemView.findViewById(R.id.textView6);
            mTextViewName = (TextView) itemView.findViewById(R.id.textView7);

        }

    }
}
(6)CarType.java

 
 

import java.util.List;

/**
 * Created by lidong on 2016/1/11.
 */
public class CarType {


    /**
     * recordcount : 22
     * table : [{"no":"1","id":"9","name":"奔驰","imgname":"ppxl"},{"no":"2","id":"11","name":"宝马","imgname":"baoma"},{"no":"3","id":"12","name":"保时捷","imgname":"baoshijie"},{"no":"4","id":"13","name":"奥迪","imgname":"aodi"},{"no":"5","id":"14","name":"路虎","imgname":"luhu"},{"no":"6","id":"15","name":"尼桑","imgname":"nisang"},{"no":"7","id":"16","name":"福特","imgname":"fute"},{"no":"8","id":"17","name":"丰田","imgname":"fengtian"},{"no":"9","id":"39","name":"玛莎拉蒂","imgname":"msld"},{"no":"10","id":"40","name":"克尔维特","imgname":"kewt"},{"no":"11","id":"51","name":"JEEP","imgname":"jeep"},{"no":"12","id":"53","name":"林肯","imgname":"linken"},{"no":"13","id":"73","name":"雷克萨斯","imgname":"lkss"},{"no":"14","id":"76","name":"道奇","imgname":"daoqi"},{"no":"15","id":"82","name":"凯迪拉克","imgname":"kaidilake"},{"no":"16","id":"93","name":"沃尔沃","imgname":"16kuanwoerwo"},{"no":"17","id":"95","name":"GMC","imgname":"GMC"},{"no":"18","id":"97","name":"宾利","imgname":"binli"},{"no":"19","id":"101","name":"法拉利","imgname":"falali"},{"no":"20","id":"113","name":"斯达泰克","imgname":"sidataike"},{"no":"21","id":"114","name":"大众","imgname":"dayin"},{"no":"22","id":"120","name":"乔治巴顿","imgname":"qiaozhibadu"}]
     */

    private String recordcount;
    /**
     * no : 1
     * id : 9
     * name : 奔驰
     * imgname : ppxl
     */

    private List<TableEntity> table;

    public void setRecordcount(String recordcount) {
        this.recordcount = recordcount;
    }

    public void setTable(List<TableEntity> table) {
        this.table = table;
    }

    public String getRecordcount() {
        return recordcount;
    }

    public List<TableEntity> getTable() {
        return table;
    }

    public static class TableEntity {
        private String no;
        private String id;
        private String name;
        private String imgname;

        public void setNo(String no) {
            this.no = no;
        }

        public void setId(String id) {
            this.id = id;
        }

        public void setName(String name) {
            this.name = name;
        }

        public void setImgname(String imgname) {
            this.imgname = imgname;
        }

        public String getNo() {
            return no;
        }

        public String getId() {
            return id;
        }

        public String getName() {
            return name;
        }

        public String getImgname() {
            return imgname;
        }
    }
}
 

   最后展示一下结果吧:






相关文章
|
8月前
|
SQL 数据库 Android开发
Android 访问系统相册选中图片,并返回该图片的路径
Android 访问系统相册选中图片,并返回该图片的路径
96 0
|
4月前
|
缓存 Android开发 数据安全/隐私保护
android开发,使用kotlin学习HTTP访问网络
android开发,使用kotlin学习HTTP访问网络
69 0
|
8月前
|
Java Android开发
Android 四大组件之ContentProvider 访问通讯录进行增删改查操作
Android 四大组件之ContentProvider 访问通讯录进行增删改查操作
51 0
|
10月前
|
JSON Java Android开发
让android支持https访问银联后台,测试成功
让android支持https访问银联后台,测试成功
|
10月前
|
Android开发 C++
Android系统的Ashmem匿名共享内存子系统分析(3)- Ashmem子系统的 C/C++访问接口
Android系统的Ashmem匿名共享内存子系统分析(3)- Ashmem子系统的 C/C++访问接口
125 0
|
12月前
|
Java API Android开发
Android C++系列:访问Assets 文件夹.md
assets目录是Android的一种特殊目录,用于放置APP所需的固定文件,且该文件被打包到APK中时,不会被编码到二进制文件。 Android还存在一种放置在res下的raw目录,该目录与assets目录不同。
270 0
|
12月前
|
Java Android开发 C++
Android C++系列:通过 JNI 访问 Java 字段和方法调用
有了之前那些基础,就可以实现 Java 和 Native 的相互调用了,在 Native 中去访问 Java 类的字段并调用相应的方法。
100 0
|
12月前
|
XML Java API
Android调用WebService
Android调用WebService,其实这有点类似于一些给我们提供原始数据API服务的数据平台,比如聚合数据!而WebService则用到了XML和SOAP,通过HTTP协议即可完成与远程机器的交互!
80 0
|
Android开发
android 中对Resources资源的访问
android 中对Resources资源的访问
84 0
|
存储 XML 设计模式
一个简单的Android网络访问全局码判断及通用数据解析方案
我们在开发中,网络请求经常会遇到各种错误码的判断。比如下面这样:
119 0