Android访问C#的Web Service时,(SoapPrimitive) envelope.g获得空值

J2EE 码拜 8年前 (2016-03-14) 1342次浏览
具体的代码如下:

package com.example.helloworld_webservicewithksoap;
import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import org.ksoap2.SoapEnvelope;
import org.ksoap2.SoapFault;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapPrimitive;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpResponseException;
import org.ksoap2.transport.HttpTransportSE;
import org.xmlpull.v1.XmlPullParserException;
import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends Activity {

	TextView tvMessage;
	final String METHOD_HELLO_WORLD = "HelloWorld";
//	final String METHOD_CheckInLockPark = "checkin_lockpark";

	//服务器链接
	final String WEB_SERVICE_URL = "http://120.24.254.42:802/OperData.asmx";
	final String Namespace = "http://tempuri.org";//命名空间
    
	Button button1;
	protected void onCreate(Bundle savedInstanceState) {

		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		initBtn();
		initTv();

	}

	private void  initTv(){

		tvMessage = (TextView) this.findViewById(R.id.tvMessage);

	}
	private void initBtn(){

		button1 = (Button)findViewById(R.id.helloworldbutton);
		button1.setOnClickListener( new OnClickListener() {

			@Override
			public void onClick(View view) {

				Map<String, String> values = new HashMap<String, String>();
				values.put("msg", "这是Android手机发出的信息");
				Request(METHOD_HELLO_WORLD);

			}

		});

	}

	public boolean onCreateOptionsMenu(Menu menu) {

		getMenuInflater().inflate(R.menu.main, menu);
		return true;

	}
	/**
	 * 调用WebService
	 * 
	 * @return WebService的返回值
	 * 
	 */
	public String CallWebService(String MethodName, Map<String, String> Params) {

		// 1、指定webservice的命名空间和调用的方法名
		SoapObject request = new SoapObject(Namespace, MethodName);

		// 2、设置调用方法的参数值,假如没有参数,可以省略,
		if (Params != null) {

			Iterator iter = Params.entrySet().iterator();

			while ( iter.hasNext() ) {

				Map.Entry entry = (Map.Entry) iter.next();
				request.addProperty( (String) entry.getKey(),
						(String) entry.getValue() );

			}

		}

		// 3、生成调用Webservice方法的SOAP请求信息。该信息由SoapSerializationEnvelope对象描述
		SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
				SoapEnvelope.VER12);
		envelope.bodyOut = request;
		// c#写的应用程序必须加上这句

		envelope.dotNet = true;
		HttpTransportSE ht = new HttpTransportSE(WEB_SERVICE_URL);

		// 使用call方法调用WebService方法

		try {

			ht.call(null, envelope);

		} catch (HttpResponseException e) {

			Log.e("--HttpResponseException异常--", e.getMessage());
			e.printStackTrace();


		} catch (IOException e) {

			Log.e("--IOException异常--", e.getMessage());
			e.printStackTrace();

		} catch (XmlPullParserException e) {

			Log.e("--XmlPullParserException异常--", e.getMessage());
			e.printStackTrace();

		}

		try {

			final SoapPrimitive result = (SoapPrimitive) envelope.getResponse();

			if (result != null) {

				Log.d("--收到的回复--", result.toString());
				return result.toString();

			}

		} catch (SoapFault e) {

			Log.e("--发生错误--", e.getMessage());
			e.printStackTrace();

		}
		return null;
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {

		int id = item.getItemId();
		if (id == R.id.action_settings) {
			return true;
		}
		return super.onOptionsItemSelected(item);

	}

	/**
	 * 执行异步任务
	 * 
	 * @param params
	 *            方法名+参数列表(哈希表形式)
	 */
	public void Request( Object... params) {

		new AsyncTask<Object, Object, String>() {
			@Override
			protected String doInBackground(Object... params) {

                System.out.println("Params的长度"+params.length);
                
				if (params != null && params.length == 2) {

					return CallWebService( (String) params[0],
							(Map<String, String>) params[1] );

				} else if (params != null && params.length == 1) {

					return CallWebService((String) params[0], null);

				} else {

					return null;

				}

			}
			protected void onPostExecute(String result) {

				if (result != null) {

					tvMessage.setText("服务器回复的信息 : " + result);

				}

			};
		}.execute(params);

	}

}

求高手帮忙

解决方案

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明Android访问C#的Web Service时,(SoapPrimitive) envelope.g获得空值
喜欢 (0)
[1034331897@qq.com]
分享 (0)