精华内容
下载资源
问答
  • android studio调用webservice
    2021-06-05 08:27:50

    本文实例讲述了Android开发调用WebService的方法。分享给大家供大家参考,具体如下:

    WebService是一种基于SOAP协议的远程调用标准,通过webservice可以将不同操作系统平台、不同语言、不同技术整合到一块。在Android SDK中并没有提供调用WebService的库,因此,需要使用第三方的SDK来调用WebService。PC版本的WEbservice客户端库非常丰富,例如Axis2,CXF等,但这些开发包对于Android系统过于庞大,也未必很容易移植到Android系统中。因此,这些开发包并不是在我们的考虑范围内。适合手机的WebService客户端的SDK有一些,比较常用的有Ksoap2,可以从http://code.google.com/p/ksoap2-android/downloads/list进行下载;将下载的ksoap2-android-assembly-2.4-jar-with-dependencies.jar包复制到Eclipse工程的lib目录中,当然也可以放在其他的目录里。同时在Eclipse工程中引用这个jar包。

    具体调用调用webservice的方法为:

    (1) 指定webservice的命名空间和调用的方法名,如:

    SoapObject request =new SoapObject(http://service,"getName");

    SoapObject类的第一个参数表示WebService的命名空间,可以从WSDL文档中找到WebService的命名空间。第二个参数表示要调用的WebService方法名。

    (2) 设置调用方法的参数值,如果没有参数,可以省略,设置方法的参数值的代码如下:

    Request.addProperty("param1","value");

    Request.addProperty("param2","value");

    要注意的是,addProperty方法的第1个参数虽然表示调用方法的参数名,但该参数值并不一定与服务端的WebService类中的方法参数名一致,只要设置参数的顺序一致即可。

    (3) 生成调用Webservice方法的SOAP请求信息。该信息由SoapSerializationEnvelope对象描述,代码为:

    SoapSerializationEnvelope envelope=new

    SoapSerializationEnvelope(SoapEnvelope.VER11);

    Envelope.bodyOut = request;

    创建SoapSerializationEnvelope对象时需要通过SoapSerializationEnvelope类的构造方法设置SOAP协议的版本号。该版本号需要根据服务端WebService的版本号设置。在创建SoapSerializationEnvelope对象后,不要忘了设置SOAPSoapSerializationEnvelope类的bodyOut属性,该属性的值就是在第一步创建的SoapObject对象。

    (4) 创建HttpTransportsSE对象。通过HttpTransportsSE类的构造方法可以指定WebService的WSDL文档的URL:

    HttpTransportSE ht=new HttpTransportSE("http://192.168.18.17:80

    /axis2/service/SearchNewsService?wsdl");

    (5)使用call方法调用WebService方法,代码:

    ht.call(null,envelope);

    Call方法的第一个参数一般为null,第2个参数就是在第3步创建的SoapSerializationEnvelope对象。

    (6)使用getResponse方法获得WebService方法的返回结果,代码:

    SoapObject soapObject =( SoapObject) envelope.getResponse();

    以下为简单的实现一个天气查看功能的例子:

    public class WebService extends Activity {

    private static final String NAMESPACE = "http://WebXml.com.cn/";

    // WebService地址

    private static String URL = "http://www.webxml.com.cn/

    webservices/weatherwebservice.asmx";

    private static final String METHOD_NAME = "getWeatherbyCityName";

    private static String SOAP_ACTION = "http://WebXml.com.cn/

    getWeatherbyCityName";

    private String weatherToday;

    private Button okButton;

    private SoapObject detail;

    @Override

    public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.main);

    okButton = (Button) findViewById(R.id.ok);

    okButton.setOnClickListener(new Button.OnClickListener() {

    public void onClick(View v) {

    showWeather();

    }

    });

    }

    private void showWeather() {

    String city = "武汉";

    getWeather(city);

    }

    @SuppressWarnings("deprecation")

    public void getWeather(String cityName) {

    try {

    System.out.println("rpc------");

    SoapObject rpc = new SoapObject(NAMESPACE, METHOD_NAME);

    System.out.println("rpc" + rpc);

    System.out.println("cityName is " + cityName);

    rpc.addProperty("theCityName", cityName);

    AndroidHttpTransport ht = new AndroidHttpTransport(URL);

    ht.debug = true;

    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(

    SoapEnvelope.VER11);

    envelope.bodyOut = rpc;

    envelope.dotNet = true;

    envelope.setOutputSoapObject(rpc);

    ht.call(SOAP_ACTION, envelope);

    SoapObject result = (SoapObject) envelope.bodyIn;

    detail = (SoapObject) result

    .getProperty("getWeatherbyCityNameResult");

    System.out.println("result" + result);

    System.out.println("detail" + detail);

    Toast.makeText(WebService.this, detail.toString(),

    Toast.LENGTH_LONG).show();

    parseWeather(detail);

    return;

    } catch (Exception e) {

    e.printStackTrace();

    }

    }

    private void parseWeather(SoapObject detail)

    throws UnsupportedEncodingException {

    String date = detail.getProperty(6).toString();

    weatherToday = "今天:" + date.split(" ")[0];

    weatherToday = weatherToday + "\n天气:" + date.split(" ")[1];

    weatherToday = weatherToday + "\n气温:"

    + detail.getProperty(5).toString();

    weatherToday = weatherToday + "\n风力:"

    + detail.getProperty(7).toString() + "\n";

    System.out.println("weatherToday is " + weatherToday);

    Toast.makeText(WebService.this, weatherToday,

    Toast.LENGTH_LONG).show();

    }

    }

    希望本文所述对大家Android程序设计有所帮助。

    更多相关内容
  • AndroidStudio 调用C#编写的WebService
  • 某些情况下我们可能需要与Mysql或者Oracle数据库进行数据交互,有些朋友的第一反应就是直接在Android中加载驱动...既然是调用WebService,我们首先的搭建WebService服务器。 下面演示的就是如何通过该网站提供的手机
  • 主要介绍了Android通过Webservice操作sqlserver数据库的相关知识,对webservice操作数据库相关知识感兴趣的朋友一起学习吧
  • Android调用WebService

    2020-06-13 15:18:03
    2.WebSerive相关技术(1)XML(2)SOAP(3)WSDL(4)UDDI3.WebService的模型Android调用WebService的简单实现1.去哪里获取WebService2.第三方jar包的准备3.获取相关参数4.导入jar包5.布局文件如下:6.实现代码如下...

    前言

    笔者本学期学习了关于WebService的相关知识,对Duddo和SpringCloud也有所学习,不过学习的都是在java平台上调用WebService服务,这学期接触了Android开发,遂想在Android平台上调用WebService,本篇文章会简单介绍WebService和在Android平台上简单调用WebSerive实例。

    WebService简介

    1.WebSerive的引入

    (1)为什么需要WebService?

    我们都知道电脑,手机硬件资源是有限的,对于一些复杂的数据处理,通过自己的硬件资源肯定是不够的,但是我们又想获取服务,这时候我们就可以通过调用远程服务器的服务来满足我们的需求,这样我们就不需要关心服务相关的实现,只要学会如何调用。

    (2)什么是WebService?

    简单的说就是某些站点开放出来的服务,当然你也可以自己开发一个service,也就是一 些方法 ,通过URL,指定某一个方法名,发出请求,站点的这个服务(方法) ,接收请求后,根据传入的参数做一些处理 ,然后将处理后的结果以XML形式返回给你,你的程序就解析这些XML参数,然后显示出来或做其他操作。
    例如:很多大的站点提供有天气预报的webservice.查询某网站的数据的webservice ,只要你发送请求过来,它就返回天气预报、某网站的数据,然后你把结果显示处来。

    2.WebSerive相关技术

    (1)XML

    可扩展的标记语言。Xml是所有开发人员都熟悉的东西,不用多说,同时采用
    XML Schema。正因为WebService采用 了Xml ,才使得它可以跨越各种编
    程语言。

    (2)SOAP

    简单对象访问协议。提供了标准的RPC方法来调用WebService。SOAP规范
    中定义了SOAP消息格式,以及怎样通过HTTP协议来使用SOAP。SOAP是
    基于XML语言和XSD标准的,其中XML是SOAP的数据编码方式。

    (3)WSDL

    WSDL是一种基于XML的用于描述WebService及其操作、 参数和返回值得
    语言。因为是基于XML ,一些IDE可以根据WebService来生成WSDL文档,
    又能通过导入WSDL文档,生成调用相应的WebService代码。

    (4)UDDI

    UDDI用于在网上自动查找WebService ,一旦WebService注册到UDDI ,
    客户就可以很方便的查找和定位所需要的WebService.

    3.WebService的模型

    服务提供者:把自己的服务注册到"服务注册中心”
    服务请求者:到"服务注册中心”查找到相应的服务,然后定位到“ 服务提供者”
    服务提供者:开始为“服务请求者”提供相应的服务

    Android调用WebService的简单实现

    1.去哪里获取WebService

    网上有很多提供WebService的站点,首先找到这些站点,然后获取相应的服务即可!
    这里选取WebXml作为此次实例进行讲解,下面是他们的官网:
    http://www.webxml.com.cn/zh_cn/index.aspx
    webXml的相关页面:
    在这里插入图片描述

    2.第三方jar包的准备

    首先如果想在Android平台上调用WebService需要依赖于第三方类库:ksoap2
    而在Android平台上,使用的是ksoap2 Android,一个高效,轻量级的SOAP开发包!
    jar包下载地址:http://simpligility.github.io/ksoap2-android/getting-started.html

    3.获取相关参数

    首先找到我们需要获取的服务,然后记录相关的参数:NameSpace(命名空间),SoapAction以及URL就不用说了,其他参数这样找:
    此次实例将调用国内手机号码归属地查询WEB服务
    首先点击下面的链接进入参数文档
    http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx
    参数文档如下:
    在这里插入图片描述

    点击getMoblieCodeInfo,进入页面,将页面中的SoapAction,NameSpace以及相关参数mark下!
    在这里插入图片描述

    4.导入jar包

    在这里插入图片描述

    5.布局文件如下:

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:padding="5dp"
        tools:context=".MainActivity">
    
        <EditText
            android:id="@+id/edit_param"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:hint="请输入查询的相关参数" />
    
        <Button
            android:id="@+id/btn_attribution"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="号码归属地查询" />
    
    
        <TextView
            android:id="@+id/txt_result"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="5dp"
            android:layout_marginTop="5dp"
            android:text="结果显示:"
            android:textSize="16sp" />
    
    </LinearLayout>
    
    

    6.实现代码如下:

    package com.example.myapplication;
    import androidx.appcompat.app.AppCompatActivity;
    
    import android.os.Bundle;
    import android.os.Handler;
    import android.os.Message;
    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.TextView;
    import android.widget.Toast;
    
    import org.ksoap2.SoapEnvelope;
    import org.ksoap2.serialization.SoapObject;
    import org.ksoap2.serialization.SoapSerializationEnvelope;
    import org.ksoap2.transport.HttpTransportSE;
    
    public class MainActivity extends AppCompatActivity {
        private EditText edit_param;
        private Button btn_attribution;
        private TextView txt_result;
        private String result;
    
    
        //定义获取手机信息的SoapAction与命名空间,作为常量
        private static final String AddressnameSpace = "http://WebXml.com.cn/";
        //归属地查询相关参数
        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 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);
            txt_result = (TextView) findViewById(R.id.txt_result);
            btn_attribution.setOnClickListener(this);
        }
    
        @Override
        public void onClick(View v) {
            switch (v.getId()) {
                case R.id.btn_attribution:
                    new Thread(new Runnable() {
                        public void run() {
                            getland();
                        }
                    }).start();
                    break;
            }
        }
    
    
    
    
    
        //定义一个获取号码归属地的方法:
        public void getland() {
            result = "";
            SoapObject soapObject = new SoapObject(AddressnameSpace, Addressmethod);
            soapObject.addProperty("mobileCode", edit_param.getText().toString());
            soapObject.addProperty("userid", "dabf121232143254854999dbfg");
            SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
            envelope.bodyOut = soapObject;
            envelope.dotNet = true;
            envelope.setOutputSoapObject(soapObject);
            HttpTransportSE httpTransportSE = new HttpTransportSE(Addressurl);
            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(0x002);
        }
    
    
    }
    
    

    7.实现结果如下:

    在这里插入图片描述

    作者:郑健健

    原文链接:https://blog.csdn.net/zhengjianjian1/article/details/106717091

    展开全文
  • 完整版ksoap2.jar包,Android调用webservice需要的第三方jar包
  • android调用Webservice方法

    千次阅读 2018-07-30 08:48:28
     笔者想实现android调用webservice,可是网上全是不管对与错乱转载的文章,结果不但不能解决问题,只会让人心烦,所以笔者决定将自己整理好的能用的android调用webservice的实现分享给大家,供以后遇到相同需求的人...

     

    1.写作背景:

      笔者想实现android调用webservice,可是网上全是不管对与错乱转载的文章,结果不但不能解决问题,只会让人心烦,所以笔者决定将自己整理好的能用的android调用webservice的实现分享给大家,供以后遇到相同需求的人能少走弯路。

      源码使用android studio编写,可以在github上面下载观看:https://github.com/jhscpang/TestWebSwervice。

     

    2.具体实现:

      本文的重点是android怎么调用webservice而不是用哪个webservice,所以这里就用网上传的比较多的计算来电归属地的webservice进行测试。这个webservice地址为:http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl。

    用浏览器访问这个网址可以看到如下界面:

    图中被圈起来的部分1说明soap版本为12, 被圈起来的部分2说明了namespace地址,这两个值稍后在代码中能用到。

    图中被圈起来的部分说明了调用的方法的名字,里面的说明文档告诉了输入参数和返回值等信息,这些信息稍后代码中也会用到。

     

      下面写请求webservice的方法,代码如下, 具体每句的解释有备注:

     

    /**
         * 手机号段归属地查询
         *
         * @param phoneSec 手机号段
         */
        public String getRemoteInfo(String phoneSec) throws Exception{
            String WSDL_URI = "http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx?WSDL";//wsdl 的uri
            String namespace = "http://WebXml.com.cn/";//namespace
            String methodName = "getMobileCodeInfo";//要调用的方法名称
    
            SoapObject request = new SoapObject(namespace, methodName);
            // 设置需调用WebService接口需要传入的两个参数mobileCode、userId
            request.addProperty("mobileCode", phoneSec);
            request.addProperty("userId", "");
    
            //创建SoapSerializationEnvelope 对象,同时指定soap版本号(之前在wsdl中看到的)
            SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapSerializationEnvelope.VER12);
            envelope.bodyOut = request;//由于是发送请求,所以是设置bodyOut
            envelope.dotNet = true;//由于是.net开发的webservice,所以这里要设置为true
    
            HttpTransportSE httpTransportSE = new HttpTransportSE(WSDL_URI);
            httpTransportSE.call(null, envelope);//调用
    
            // 获取返回的数据
            SoapObject object = (SoapObject) envelope.bodyIn;
            // 获取返回的结果
            result = object.getProperty(0).toString();
            Log.d("debug",result);
            return result;
    
        }

     

      因为调用webservice属于联网操作,因此不能再UI线程中执行访问webservice,为了便于将结果反馈给UI线程,采用AsyncTask线程,代码如下:

     

     class QueryAddressTask extends AsyncTask<String, Integer, String> {
            @Override
            protected String doInBackground(String... params) {
                // 查询手机号码(段)信息*/
                try {
                    result = getRemoteInfo(params[0]);
    
                } catch (Exception e) {
                    e.printStackTrace();
                }
                //将结果返回给onPostExecute方法
                return result;
            }
    
            @Override
            //此方法可以在主线程改变UI
            protected void onPostExecute(String result) {
                // 将WebService返回的结果显示在TextView中
                resultView.setText(result);
            }
        }

     

      然后在主线程中给用户设置使用该功能的方法,代码如下:

     

    private EditText phoneSecEditText;
        private TextView resultView;
        private Button queryButton;
        private String result;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            phoneSecEditText = (EditText) findViewById(R.id.phone_sec);
            resultView = (TextView) findViewById(R.id.result_text);
            queryButton = (Button) findViewById(R.id.query_btn);
    
            queryButton.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    // 手机号码(段)
                    String phoneSec = phoneSecEditText.getText().toString().trim();
                    // 简单判断用户输入的手机号码(段)是否合法
                    if ("".equals(phoneSec) || phoneSec.length() < 7) {
                        // 给出错误提示
                        phoneSecEditText.setError("您输入的手机号码(段)有误!");
                        phoneSecEditText.requestFocus();
                        // 将显示查询结果的TextView清空
                        resultView.setText("");
                        return;
                    }
    
                    //启动后台异步线程进行连接webService操作,并且根据返回结果在主线程中改变UI
                    QueryAddressTask queryAddressTask = new QueryAddressTask();
                    //启动后台任务
                    queryAddressTask.execute(phoneSec);
    
                }
            });
        }

     

      布局文件如下:

     

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:paddingTop="5dip"
        android:paddingLeft="5dip"
        android:paddingRight="5dip"
        >
        <TextView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="手机号码(段):"
            />
        <EditText android:id="@+id/phone_sec"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:inputType="textPhonetic"
            android:singleLine="true"
            android:hint="例如:1398547"
            />
        <Button android:id="@+id/query_btn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="right"
            android:text="查询"
            />
        <TextView android:id="@+id/result_text"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal|center_vertical"
            />
    </LinearLayout>

     

      AndroidManifest文件如下:

     

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.jhsc.testwebservice" >
    
        <uses-permission android:name="android.permission.INTERNET" />
    
        <application
            android:allowBackup="true"
            android:icon="@mipmap/ic_launcher"
            android:label="@string/app_name"
            android:supportsRtl="true"
            android:theme="@style/AppTheme" >
            <activity android:name=".MainActivity" >
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
        </application>
    
    </manifest>

     

      运行效果如下图:

    展开全文
  • 我的有一篇博客上讲了如何基于CXF搭建webservice,service层的接口会被部署到tomcat上,这一篇我就讲一下如何在安卓中调用这些接口传递参数。1.在lib中放入ksoap2的jar包并导入2.在xml 配置文件中加入:3.接下来就要...

    我的有一篇博客上讲了如何基于CXF搭建webservice,service层的接口会被部署到tomcat上,这一篇我就讲一下如何在安卓中调用这些接口传递参数。

    1.在lib中放入ksoap2的jar包并导入

    2.在xml 配置文件中加入:

    3.接下来就要通过代码调用借口了

    String WSDL_URI = "http://localhost:8080/WebService4/getNewIdPort?wsdl";//wsdl 的uri

    String namespace = "http://services.he.TSD/";//namespace

    String methodName = "getNew";//要调用的方法名称

    // 创建HttpTransportSE对象

    HttpTransportSE ht = new HttpTransportSE(WSDL_URI);

    ht.debug = true;

    // 使用soap1.1协议创建Envelop对象

    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);// 实例化SoapObject对象

    SoapObject object = new SoapObject(namespace, methodName);

    // 设置参数

    object.addProperty("arg0", "hhh");

    // 将SoapObject对象设置为SoapSerializationEnvelope对象的传出SOAP消息

    envelope.bodyOut = object;//由于是发送请求,所以是设置bodyOut

    envelope.dotNet =false;

    envelope.setOutputSoapObject(object);

    try{

    // 调用webService

    ht.call(null, envelope);

    System.out.println("回传的值 :"+envelope.getResponse());

    }

    catch (Exception e) {

    e.printStackTrace();

    String msg=e.getMessage();

    System.out.println(msg);

    }

    4.若webservice接收不到android传来的值:

    (1)参数名不对

    (2).net的webservice要将envelope.dotNet =true,否则envelope.dotNet =false

    5.由于是部署到tomcat上的,为了同处于一个网段,要手机和电脑连一个wifi。 ipv4查找用window+R,接着cmd,最后ipconfig 即可查到。

    6.要关闭windows防火墙

    7.当时我还遇到了一个问题,就是当传递的信息复杂时,比如传递list型的一个自定义的类,会出现问题,当时我是重写了ListAdapter类,如下所示:

    package com.adapter;

    /**

    * Created by hexiaolu on 2017/4/13.

    */

    import java.util.ArrayList;

    import java.util.HashMap;

    import java.util.List;

    import java.util.Map;

    import android.app.Activity;

    import android.content.Context;

    import android.os.Bundle;

    import android.text.Editable;

    import android.text.TextWatcher;

    import android.view.LayoutInflater;

    import android.view.View;

    import android.view.ViewGroup;

    import android.widget.BaseAdapter;

    import android.widget.EditText;

    import android.widget.ListView;

    import android.widget.TextView;

    import com.example.administrator.stock2.R;

    public class ListAdapter extends BaseAdapter {

    HashMap item = new HashMap();

    private LayoutInflater mInflater;

    //private List> mData;// 存储的EditText值

    private ArrayList mData=new ArrayList();

    //private ArrayList mDate = new ArrayList();

    public Map editorValue = new HashMap();//

    private TextView spendMoney;

    public ListAdapter(Context context, ArrayList data,TextView spend) {

    spendMoney=spend;

    mData = data;

    mInflater = LayoutInflater.from(context);

    init();

    }

    // 初始化

    private void init() {

    editorValue.clear();

    }

    @Override

    public int getCount() {

    return mData.size();

    }

    @Override

    public Object getItem(int position) {

    return null;

    }

    @Override

    public long getItemId(int position) {

    return 0;

    }

    private Integer index = -1;

    @Override

    public View getView(int position, View convertView, ViewGroup parent) {

    ViewHolder holder = null;

    // convertView为null的时候初始化convertView。

    if (convertView == null) {

    holder = new ViewHolder();

    convertView = mInflater.inflate(R.layout.list_item, null);

    holder.goodsName = (TextView) convertView

    .findViewById(R.id.list_item_goodsName);

    holder.goodsSellPrice = (TextView) convertView

    .findViewById(R.id.list_item_goodsSellPrice);

    holder.goodsUnit = (TextView) convertView

    .findViewById(R.id.list_item_goodsUnit);

    holder.goodsSellNum = (EditText) convertView

    .findViewById(R.id.list_item_goodsSellNum);

    holder.goodsSellNum.setTag(position);

    /*holder.goodsSellNum.setOnTouchListener(new OnTouchListener() {

    @Override

    public boolean onTouch(View v, MotionEvent event) {

    if (event.getAction() == MotionEvent.ACTION_UP) {

    index = (Integer) v.getTag();

    }

    return false;

    }

    });*/

    class MyTextWatcher implements TextWatcher {

    public MyTextWatcher(ViewHolder holder) {

    mHolder = holder;

    }

    private ViewHolder mHolder;

    @Override

    public void onTextChanged(CharSequence s, int start,

    int before, int count) {

    }

    @Override

    public void beforeTextChanged(CharSequence s, int start,

    int count, int after) {

    }

    @Override

    public void afterTextChanged(Editable s) {

    if (s != null && !"".equals(s.toString())) {

    int position = (Integer) mHolder.goodsSellNum.getTag();

    /*mData.get(position).put("goodsSellNum",s.toString());// 当EditText数据发生改变的时候存到data变量中*/

    item=(HashMap)mData.get(position);

    item.put("goodsSellNum",s.toString());

    mData.set(position,item);

    spendMoney.setText(String.valueOf(calculate()));//计算总价格

    }

    }

    }

    holder.goodsSellNum.addTextChangedListener(new MyTextWatcher(holder));

    convertView.setTag(holder);

    } else {

    holder = (ViewHolder) convertView.getTag();

    holder.goodsSellNum.setTag(position);

    }

    item=(HashMap)mData.get(position);

    Object value=item.get("goodsName");

    //Object value = mData.get(position).get("list_item_goodsName");

    if (value != null) {

    holder.goodsName.setText((String) value);

    }

    item=(HashMap)mData.get(position);

    value=item.get("goodsSellPrice");

    //value = mData.get(position).get("list_item_goodsSellPrice");

    if (value != null) {

    holder.goodsSellPrice.setText(value.toString());

    }

    item=(HashMap)mData.get(position);

    value=item.get("goodsUnit");

    //value = mData.get(position).get("list_item_goodsUnit");

    if (value != null) {

    holder.goodsUnit.setText(value.toString());

    }

    item=(HashMap)mData.get(position);

    value=item.get("goodsSellNum");

    //value = mData.get(position).get("list_item_goodsSellNum");

    if (value != null && !"".equals(value)) {

    holder.goodsSellNum.setText(value.toString());

    }

    holder.goodsSellNum.clearFocus();

    if (index != -1 && index == position) {

    holder.goodsSellNum.requestFocus();

    }

    return convertView;

    }

    public final class ViewHolder {

    public TextView goodsName;

    public TextView goodsSellPrice;

    public EditText goodsSellNum;// ListView中的输入

    public TextView goodsUnit;// 用来定义的标志性主键,可不用关心

    }

    public float calculate() {

    float money = 0;

    for (int i = 0; i < mData.size(); i++) {

    HashMap item = new HashMap();

    item = (HashMap) mData.get(i);

    float num = Float.parseFloat(item.get("goodsSellNum").toString());

    float price = Float.parseFloat(item.get("goodsSellPrice").toString());

    money = money + num * price;

    }

    return money;

    }

    }

    8.调如何用ListAdapter类

    ListAdapter adapter = new ListAdapter(this, list,spendMoney);

    lv_goodsList.setAdapter(adapter);

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

    展开全文
  • 最近一直整如何在Android调用webservice,整了半个月左右,有种想写点东西的冲动,想把这些问题写下来,以后遇到了也不会没有地方查资料。以前学过一点java然后就捣鼓了一下android,由于需要和桌面端进行交互,...
  • Android平台调用Web Service需要依赖于第三方类库ksoap2,它是一个SOAP Web service客户端开发包,主要用于资源受限制的Java环境如Applets或J2ME应用程序(CLDC/ CDC/MIDP)。认真读完对ksoap2的介绍你会发现并...
  • 本源码示例主要说明了,在android app中如何调用webservice,实现相关功能,具有一定参考意义
  • Android调用Webservice实现号码归属地查询案例!
  • 我们开发大部分的网络请求都是http来完成的,所以可能有人没有用过WebService,特此写一篇来加深印象并希望可以供大家参考首先我们需要用到ksoap2的jar包我用的版本是ksoap2-android-assembly-3.5.0-jar-with-...
  • Android调用Java WebService的实现方法.pdf
  • 释放双眼,带上耳机,听听看~!...接下来就要通过代码调用借口了String WSDL_URI = "http://localhost:8080/WebService4/getNewIdPort?wsdl";//wsdl 的uriString namespace = "http://services.he.TSD/";//n...
  • 终于调通安卓调用Webservice,传参并解析XML的样例,使用工具:Android Studio和Eclipse.Eclipse启动WebServer,Android Studio进行Application编码调试。两个工程文件都在压缩包中。喜极而泣。。。
  • 首先说一下背景,由于目前个人自学Android Studio,参考度娘实现连接DB的方式,总结出目前主流的两种方式: 1)使用jtds直接访问DB数据库(参考:https://blog.csdn.net/feidie436/article/details/77532194/)方式...
  • Android 调用 WebService 1.WebService简介 PS:如果看完上面简介还不是很清楚的话,那么就算了,之前公司就用C#搭的一个WebService! 本节我们并不讨论如何去搭建一个WebService,我们仅仅知道如何去获取...
  • 上一篇,我们简单的讲述了Android如何进行WebService调用!而往往我们在项目中会先封装一下再使用!那么我们如何进行能力封装使用呢?一.了解共性,机制,思考可扩展,独立,可移植性。首先在Android中通讯,我们必...
  • 这几天开发一个WebService遇到不少问题,记录下来顺便帮助一下之后遇到状况的人。web我是经过ADO.NET来链接ORACLE的,也能够用ORACLE提供的ODP.NET。服务器经过正常的链接后部署IIS 用IE调用个人接口出现了框架...
  • 如题,但是我直接运行webservice的时候不报错,在app里面调用就提示超时,我用的是Ksoap2这个第三方的东西,在里面设置了超时时间也不起作用,哪位大神做过这方面的啊?救命~~~~~~
  • Android studio3.0.1; vs2013 ; 调用C#写的WebService_vs2013_as3.0 进行读取操作
  • android studio 读取webservice 的返回数据字符串的简单方法webService端 (c#)【webMethod】Public string getStringInfo(){String rStr =“info0#info1#info2#info3”;//多个数据字串用#号隔开,或用其他字符间隔...
  • 在手机ANDROID调用WEBSERVICE接口,需要使用ksoap2的JAR包,KSOAP2 地址:http://code.google.com/p/ksoap2-android/   调用 WebService 分以下几步: 1、指定 WebService 的命名空间和调用方法 ; 2、...
  • Android studio 之天气预报Webservices
  • 该楼层疑似违规已被系统折叠隐藏此楼查看此楼我在PC端写了一个webservice用来操作SQL server数据库,并成功发布了但是用android studio运行时候调用一直报错, 大佬们能帮看看吗?I/System.out: 准备开启服务D/...
  • 当前位置:我的异常网» Web前端»android透过webservice验证用户android透过webservice验证用户www.myexceptions.net网友分享于:2015-08-26...在这里我们通过实例来描述android怎样调用.net webservice第一步:v...
  • Android调用WebService详解

    千次阅读 2016-04-25 20:48:19
    我们在Android开发中,需要掌握的不仅仅是http的请求方式,有时候我们还需要去调用服务器端的Web Services,Web Services到底是什么东西的?怎么来用呢?因为项目需要,所以花了一个晚上的时间研究了一下,下面把学到...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 811
精华内容 324
关键字:

android studio调用webservice