Android Studio 链接WebServices

ksoap2android 下载链接:https://pan.baidu.com/s/1miDvwA8 密码:5obq

webservices准备就绪:

 

 

一、添加引用

 

二、新建类GetDataTask继承AsyncTask<传入参数类型,进度单位(一般为Integer),返回结果>

 

package com.sdtimoniyor.ticketsystem.WebServices;

import android.os.AsyncTask;
import android.os.Handler;
import android.os.Message;
import android.speech.tts.Voice;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import com.sdtimoniyor.ticketsystem.R;

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

public class WebServiceHome extends AppCompatActivity {
    private TextView tx;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.webservice_home);
        Button showbtn = (Button) findViewById(R.id.webservices_btn);
        tx = (TextView) findViewById(R.id.data);
        tx.setText("yyyyyyyy");

        showbtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                new GetDataTask().execute();
            }
        });
    }


    class GetDataTask extends AsyncTask<String, Integer, String> {
        public String result;

        @Override
        protected String doInBackground(String... params) {
            try {
                result = GetDB();
            } catch (Exception e) {
                e.printStackTrace();
            }
            return result;
        }

        @Override
        protected void onPostExecute(String s) {
            tx.setText(s);
        }

        public String GetDB() {
            String WebServicesUrl = "http://192.168.0.117/WebService.asmx";   //WebServices地址
            String NameSpace = "http://SDTIWebServices/";                     //命名空间
            String MethodName = "GetTicketListAll";                           //方法名

            SoapObject request = new SoapObject(NameSpace, MethodName);

       //设置需调用WebService接口需要传入的两个参数mobileCode、userId
       //request.addProperty("mobileCode", phoneSec);
       //request.addProperty("userId", "");
SoapSerializationEnvelope envelope
= new SoapSerializationEnvelope(SoapEnvelope.VER12); envelope.bodyOut = request;//由于是发送请求,所以是设置bodyOut envelope.dotNet = true;//由于是.net开发的webservice,所以这里要设置为true HttpTransportSE httpTransportSE = new HttpTransportSE(WebServicesUrl); try { httpTransportSE.call(null, envelope);//调用 } catch (Exception e) { e.printStackTrace(); } SoapObject object = (SoapObject) envelope.bodyIn;// 获取返回的数据 result = object.getProperty(0).toString();// 获取返回的结果 return result; } } }

 

效果展示

 

 

 

记得添加网络权限

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

 

说下我遇到的问题

1.C# 写的基于.net3.5的webservice接口,JsonConvert.SerializeObject()序列化后本地测试(IIS10)没有问题,但是发布到虚拟主机上(IIS6  .net3.5)上后请求接口返回500请求失败,但是自己把数据拼接Json返回却又不会报错,猜测Newtonsoft.Json版本太高,.net版本太低造成。

2.Android调用时候命名空间写法最后带斜杠,不带有些版本会报错,可以自己试试。

posted @ 2017-08-10 15:34  XinYiBuFang  阅读(1289)  评论(0编辑  收藏  举报