关于网友提出的“快崩溃了,android调用带参数的net web service 问题”问题疑问,本网通过在网上对“快崩溃了,android调用带参数的net web service 问题”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题:快崩溃了,android调用带参数的net web service 问题
描述: 服务器端设置如下:
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Web;
using System.Web.UI;
using System.Web.Services;
using System.IO;
using System.Data.SqlClient;
using System.Web.Services.Protocols;
///
/// GetBinaryFile 的摘要说明
///
[WebService(Namespace = "http://happy.ydjw.service/")]
[WebServiceBinding(ConformsTo = WsiProfiles.None)]
public class GetBinaryFile : System.Web.Services.WebService {
public GetBinaryFile () {
//如果使用设计的组件,请取消注释以下行
//InitializeComponent();
}
[WebMethod(Description = "Web 服务提供的方法,返回给定文件类型。")]
[SoapRpcMethod(Action = "http://happy.ydjw.service/GetImageType", RequestNamespace = "http://happy.ydjw.service/", ResponseNamespace = "http://happy.ydjw.service/")]
public string GetImageType(string fileName)
{
///这里只是测试,您可以根据实际的文件类型进行动态输出
return fileName+"test";
}
}
调用程序如下:
package cndx.ydjw;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import org.ksoap2.SoapEnvelope;
import org.ksoap2.SoapFault;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.AndroidHttpTransport;
import org.ksoap2.transport.HttpTransportSE;
import org.xmlpull.v1.XmlPullParserException;
import android.app.Activity;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.widget.TextView;
public class ydjwMain extends Activity {
public static final String LOG_TAG = "happy";
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
HttpThread thread = new HttpThread(handler);
// 构造请求参数
HashMap params = new HashMap();
try {
params.put("fileName", new String("zhjx".getBytes(),"UTF-8"));
} catch (Exception ex) {
ex.printStackTrace();
}
//
String url = "http://132.99.38.108/aspxWebCS/GetBinaryFile.asmx";
// String url =
// "http://webservice.webxml.com.cn/WebServices/WeatherWebService.asmx";
String nameSpace = "http://happy.ydjw.service/";
String methodName = "GetImageType";
// 开始新线程进行WebService请求
thread.doStart(url, nameSpace, methodName, params);
}
Handler handler = new Handler() {
public void handleMessage(Message m) {
String result = (String) m.getData().getString("data");
TextView textView = (TextView) findViewById(R.id.result);
textView.setText(result);
}
};
public class HttpThread extends Thread {
private Handler handle = null;
String url = null;
String nameSpace = null;
String methodName = null;
HashMap params = null;
ProgressDialog progressDialog = null;
// 构造函数
public HttpThread(Handler hander) {
handle = hander;
}
/**
* 启动线程
*/
public void doStart(String url, String nameSpace, String methodName,
HashMap params) {
// TODO Auto-generated method stub
this.url = url;
this.nameSpace = nameSpace;
this.methodName = methodName;
this.params = params;
progressDialog = ProgressDialog.show(ydjwMain.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();
System.out.println("happy");
System.out.println(result.getPropertyCount());
String rlt =(String) result.getProperty(0);
System.out.println(rlt);
// a取消进度对话框
progressDialog.dismiss();
// 构造消息
Message message = handle.obtainMessage();
Bundle b = new Bundle();
b.putString("data", rlt);
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);
// 请求参数
if (params != null && !params.isEmpty()) {
System.out.println("paramssize-->"+params.size());
for (Iterator it = params.entrySet().iterator(); it.hasNext();) {
Map.Entry e = (Entry) it.next();
request.addProperty(e.getKey().toString(), e.getValue());
}
}
// 生成调用web service方法的soap请求消息
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
SoapEnvelope.VER11);
// 设置.net web service
envelope.bodyOut=request;
envelope.dotNet = true;
// 发送请求
envelope.setOutputSoapObject(request);
//
AndroidHttpTransport androidHttpTrandsport = new AndroidHttpTransport(
url);
Object result = null;
try {
// web service请求
androidHttpTrandsport.debug=true;
androidHttpTrandsport.call(SOAP_ACTION, envelope);
System.out.println( androidHttpTrandsport.requestDump);
System.out.println( androidHttpTrandsport.responseDump);
// 得到返回结果
result = envelope.bodyIn;
//result=(Object)androidHttpTrandsport.responseDump;
} catch (Exception ex) {
Log.e("SoapFault",ex.getMessage());
ex.printStackTrace();
}
return result;
}
}
}
返回结果:
test
而不是正确的"zhjxtest"!!!
网上找了一天,都找不到解决办法,请大家帮帮忙!!!
解决方案1: 你确定String methodName = "GetImageType"这个没问题么
解决方案2: http://blog.csdn.net/fanweiwei/archive/2010/05/26/5624267.aspx
参考
以上介绍了“快崩溃了,android调用带参数的net web service 问题”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/768744.html