Android 开发笔记“调用.net webservice遇到的问题”

1、An exception occurred: org.ksoap2.SoapFault

SoapFault - faultcode: ‘soap:Server‘ faultstring: ‘服务器无法处理请求。 ---> 未能加载文件或程序集“MySql.Data, Version=6.3.9.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d”或它的某一个依赖项。系统找不到指定的文件。‘ faultactor: ‘null‘ detail: [email protected]

原因:webservice 中采用了强类型数据集(DataSet)连接MySql数据库,简化数据库底层开发

解决:装一下mysql-connector-net-6.3.9.msi就可以了,文章下面有地址

2、Android访问webservice 帮助类,源码如下:

package com.sinobpo.nbsmt.webservice;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.BasicResponseHandler;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;
import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapPrimitive;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;

public class WebServiceUtil {

    /**
     * .Net WebService调用方法
     *
     * @param nameSpace
     * @param methodName
     * @param webServiceUrl
     * @param map
     * @return
     */
    public static String doCallWebService(String nameSpace, String methodName,
            String webServiceUrl, Map map) {
        String xmlStr = null;
        SoapObject _soapObject = new SoapObject(nameSpace, methodName);

        // 如果有参数,设置调用方法参数
        Set _keySet = map.keySet();// 返回键的集合
        Iterator _iterator = _keySet.iterator();

        while (_iterator.hasNext()) // 第一种迭代方式取键值
        {
            Object key = _iterator.next();
            _soapObject.addProperty(key.toString(), map.get(key));
        }
        try {
            SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
                    SoapEnvelope.VER11);

            // 是否可以调用.netWebService
            envelope.dotNet = true;
            envelope.setOutputSoapObject(_soapObject);

            HttpTransportSE ht = new HttpTransportSE(webServiceUrl, 5000);

            ht.call(nameSpace + methodName, envelope);

            if (envelope.getResponse() != null) {
                SoapPrimitive response = (SoapPrimitive) envelope.getResponse();
                xmlStr = response.toString();
            }

        } catch (Exception e) {
            System.out.println("prop: " + e.toString());
            e.printStackTrace();
            return null;
        }
        return xmlStr;
    }

    /**
     * Java WebService调用方法
     *
     * @param nameSpace
     * @param methodName
     * @param webServiceUrl
     * @param map
     * @return
     */
    public static String doCallWebServiceForJava(String nameSpace,
            String methodName, String webServiceUrl, Map map) {
        String xmlStr = null;
        // 创建httpTransportSE传输对象
        HttpTransportSE ht = new HttpTransportSE(webServiceUrl);
        ht.debug = true;
        // 使用soap1.1协议创建Envelop对象
        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
                SoapEnvelope.VER11);
        // 实例化SoapObject对象
        SoapObject request = new SoapObject(nameSpace, methodName);
        /**
         * 设置参数,参数名不一定需要跟调用的服务器端的参数名相同,只需要对应的顺序相同即可
         * */
        // 如果有参数,设置调用方法参数
        Set _keySet = map.keySet();// 返回键的集合
        Iterator _iterator = _keySet.iterator();

        while (_iterator.hasNext()) // 第一种迭代方式取键值
        {
            Object key = _iterator.next();
            request.addProperty(key.toString(), map.get(key));
        }
        // request.addProperty("json", "YYYY");
        // soapheader在这里
        // Element[] header = new Element[1];
        // Element lv = new Element().createElement(nameSpace, "json");
        // lv.addChild(Node.TEXT, "");
        // 将SoapObject对象设置为SoapSerializationEnvelope对象的传出SOAP消息
        envelope.bodyOut = request;
        // envelope.dotNet = false;
        try {
            // 调用webService
            ht.call(null, envelope);
            if (envelope.getResponse() != null) {
                // SoapObject result = (SoapObject) envelope.bodyIn;
                // String name = envelope.bodyIn.toString();
                System.out.println("envelope.getResponse()="
                        + envelope.getResponse().toString());
                xmlStr = "";
            } else {
                xmlStr = null;
            }
        } catch (Exception e) {
            System.out.println("prop: " + e.toString());
            e.printStackTrace();
        }

        return xmlStr;
    }

    public static String doCallWebServiceForPhp(String webServiceUrl) {
        String xmlStr = null;
        HttpParams httpParams = new BasicHttpParams();
        HttpConnectionParams.setConnectionTimeout(httpParams, 5000);
        HttpConnectionParams.setSoTimeout(httpParams, 5000);
        HttpParams p = new BasicHttpParams();
        p.setParameter("user", "1");
        HttpClient httpclient = new DefaultHttpClient(p);
        HttpPost httppost = new HttpPost(webServiceUrl);
        List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
        nameValuePairs.add(new BasicNameValuePair("user", "1"));
        try {
            httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
            ResponseHandler<String> responseHandler = new BasicResponseHandler();
            xmlStr = httpclient.execute(httppost, responseHandler);
        } catch (UnsupportedEncodingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (ClientProtocolException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return xmlStr;
    }
}

3、invalid project description

a、此错误简单翻译为:无效的项目描述。点击错误对话框中的detail按钮,提示为:overlaps the location of another project的描述,翻译成中文也就是说导入的项目位置与另外一个项目重叠。

b、导致此错误的很有可能的原因之一为:此项目在eclipse的工作目录之下。所以,将项目拷贝到另一个目录下,然后再尝试导入,大部分情况下是可以解决此问题的。

资料地址

mysql-connector-net-6.3.9.msi:http://yunpan.cn/cKx77DgN6Z9EX (提取码:80c7)

时间: 2024-10-12 20:21:41

Android 开发笔记“调用.net webservice遇到的问题”的相关文章

Android 开发笔记 “调用WebService”

WebService是一种基于SOAP协议的远程调用标准,通过webservice可以将不同操作系统平台.不同语言.不同技术整合到一块.在Android SDK中并没有提供调用WebService的库,因此,需要使用第三方的SDK来调用WebService.PC版本的WEbservice客户端库非常丰富,例如Axis2,CXF等,但这些开发包对于Android系统过于庞大,也未必很容易移植到Android系统中.因此,这些开发包并不是在我们的考虑范围内.适合手机的WebService客户端的SD

Android开发笔记(八十八)同步与加锁

同步synchronized 同步方法 synchronized可用来给方法或者代码块加锁,当它修饰一个方法或者一个代码块的时候,同一时刻最多只有一个线程执行这段代码.这就意味着,当两个并发线程同时访问synchronized代码块时,两个线程只能是排队做串行处理,另一个线程要等待前一个线程执行完该代码块后,才能再次执行synchronized代码块. 使用synchronized修饰某个方法,该方法便成为一个同步方法,在同一时刻只能有一个线程执行该方法.可是,synchronized的锁机制太

Android开发笔记(一百三十四)协调布局CoordinatorLayout

协调布局CoordinatorLayout Android自5.0之后对UI做了较大的提升,一个重大的改进是推出了MaterialDesign库,而该库的基础即为协调布局CoordinatorLayout,几乎所有的design控件都依赖于该布局.协调布局的含义,指的是内部控件互相之前的动作关联,比如在A视图的位置发生变化之时,B视图的位置也按照某种规则来变化,仿佛弹钢琴有了协奏曲一般. 使用CoordinatorLayout时,要注意以下几点:1.导入design库:2.根布局采用androi

Android开发笔记(一百三十二)矢量图形与矢量动画

矢量图形VectorDrawable 与水波图形RippleDrawable一样,矢量图形VectorDrawable也是Android5.0之后新增的图形类.矢量图不同于一般的图形,它是由一系列几何曲线构成的图像,这些曲线以数学上定义的坐标点连接而成.具体到实现上,则需开发者提供一个xml格式的矢量图形定义,然后系统根据矢量定义自动计算该图形的绘制区域.因为绘图结果是动态计算得到,所以不管缩放到多少比例,矢量图形都会一样的清晰,不像位图那样拉大后会变模糊. 矢量图形的xml定义有点复杂,其结构

Android开发笔记

一.Android的体系结构 1.1 体系结构 从下往上进行层概述: Linux内核层: 该层主要的作用是:对系统进行管理例如:驱动管理,电源管理,进程管理,安全管理,内存管理等等. 硬件抽象层: 该层主要的作用是:对Linux底层实现进行屏蔽,向上提供接口,该层不开源,主要是为了维护商家的利益,但是会影响系统的性能 Android对硬件的支持分为两层:一层是用户空间,另一层是内核空间, 用户空间存放的是:硬件抽象层,该层提供具体的访问细节 内核空间存放的是:Linux驱动程序,该层只是提供简单

Android开发笔记(一百四十一)读取PPT和PDF文件

读取ppt文件 读取纯文本 上一篇博文讲到在Android上如何读取word文件内容,那么office三剑客中还剩ppt文件的读取.前面解析word文件和excel文件时,都用到了poi库读取文件内容,对于ppt一样也可以通过poi读取幻灯片中的文本.HSLFSlideShow类就是poi中专门用于解析幻灯片的工具类,每张幻灯片又分别由单独的HSLFSlide类处理,幻灯片中的具体图文内容则由HSLFTextParagraph和HSLFTextRun进行分辨. 下面是使用poi解析ppt文件(2

Android开发笔记(一百零九)利用网盘实现云存储

网盘存储 个人开发者往往没有自己的后台服务器,但同时又想获取app的运行信息,这就要借助于第三方的网络存储(也叫网盘.云盘.微盘等等).通过让app自动在网盘上存取文件,可以间接实现后台服务器的存储功能,同时开发者也能及时找到app的用户信息. 曾几何时,各大公司纷纷推出免费的个人网盘服务,还开放了文件管理api给开发者调用,一时间涌现了网盘提供商的八大金刚:百度网盘.阿里云.华为网盘.腾讯微云.新浪微盘.360云盘.金山快盘.115网盘.可是好景不长,出于盈利.监管等等因素,各大网盘开放平台要

Android开发笔记(一百零八)智能语音

智能语音技术 如今越来越多的app用到了语音播报功能,例如地图导航.天气预报.文字阅读.口语训练等等.语音技术主要分两块,一块是语音转文字,即语音识别:另一块是文字转语音,即语音合成. 对中文来说,和语音播报相关的一个技术是汉字转拼音,想想看,拼音本身就是音节拼读的标记,每个音节对应一段音频,那么一句的拼音便能用一连串的音频流合成而来.汉字转拼音的说明参见<Android开发笔记(八十三)多语言支持>. 语音合成通常也简称为TTS,即TextToSpeech(从文本到语言).语音合成技术把文字

Android开发笔记(一百零七)统计分析SDK

APP统计分析 用户画像 对程序员来说,用户画像就是用户的属性和行为:通俗地说,用户画像是包括了个人信息.兴趣爱好.日常行为等血肉丰满的客户实体.用户画像是精准营销的产物,企业通过收集用户的行为,然后分析出用户的特征与偏好,进而挖掘潜在的商业价值,实现企业效益的最大化. 用户画像的一个具体应用是电商app的"猜你喜欢"栏目,电商平台通过对用户购买过的商品进行统计,可以分析用户日常生活用的是什么物品:电商平台还可以对用户的搜索行为.浏览行为进行统计,从中分析用户感兴趣的商品,或者说考虑购