使用KSOAP 2从Android访问.NET Web服务。 [英] Accessing a .NET Web Service from an Android using KSOAP 2.

查看:63
本文介绍了使用KSOAP 2从Android访问.NET Web服务。的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

下午好,



这里我使用Android处理程序来执行后台任务。使用kso​​ap2库从Android访问基于SOAP的Web服务。我必须遵循以下步骤完成此任务。



1.将ksoap2添加到Android项目的java构建路径。

2. MainActivity的代码.java类

  package  com.example.webservicecalling; 

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

import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;



import com.example.webservicecalling.R;

public class MainActivity extends ActionBarActivity {

public final static 字符串 URL = http://www.w3schools.com/webservices/tempconvert.asmx;
public final static < span class =code-sdkkeyword> String
SOAP_ACTION = http://tempuri.org/CelsiusToFahrenheit ;


public static final 字符串 NAMESPACE = http ://tempuri.org/;

private static final 字符串 METHOD = CelsiusToFahrenheit;


private TextView temperatureTxt;

@ Override
protected void onCreate(Bundle savedInstanceState){

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

private void init(){
temperatureTxt =(TextView)findViewById(R.id.textView1);

new ConversionAsyncTask()。execute();
}

@覆盖
public boolean onCreateOptionsMenu(菜单菜单){
// 充气菜单;如果项目存在,则会将项目添加到操作栏。
getMenuInflater()。inflate(R.menu.main,menu);
返回 true;
}

@覆盖
public boolean onOptionsItemSelected(MenuItem item){
// Handle操作栏项目点击此处。操作栏将
// 自动处理Home / Up按钮上的点击,
// 在AndroidManifest.xml中指定父活动。
int id = item.getItemId();
if (id == R.id.action_settings){
return true ;
}
return super .onOptionsItemSelected(item);
}

private class ConversionAsyncTask extends AsyncTask< void,> {
私人 SoapPrimitive响应;

@ Override
protected Void doInBackground(Void ... params){
SoapSerializationEnvelope soapEnvelope = new SoapSerializationEnvelope(
SoapEnvelope.VER11);

SoapObject request = new SoapObject(NAMESPACE,METHOD);
soapEnvelope.setOutputSoapObject(request);

soapEnvelope.dotNet = true;

尝试 {
HttpTransportSE aht = new HttpTransportSE(URL) ;
aht.call(SOAP_ACTION,soapEnvelope);
request.addProperty( Celsius 32);
response =(SoapPrimitive)soapEnvelope.getResponse();

} catch (例外e){
e.printStackTrace();
}

return null;
}

@覆盖
受保护 void onPostExecute(无效结果){
super .onPostExecute(result);
temperatureTxt.setText( 状态: +响应);

}
}


}





3.在应用程序标签之前为AndroidManifest添加互联网权限

 <   uses-permission     android:name   =  android.permission.INTERNET    xmlns:android   = #unknown    /  >  



4. activity_main.xml的代码

 <   relativelayout     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:paddingBottom =@ dimen / activity_vertical_margin
android:paddingLeft =@ dimen / activity_horizo​​ntal_margin
android:paddingRight =@ dimen / activity_horizo​​ntal_margin
android:paddingTop =@ dimen / activity_vertical_margin
tools:context =com.example.webservicecalling.MainActivity>

< textview > ;
android:id =@ + id / textView1
android:layout_width =wrap_content
android:layout_height =wrap_content
android:text = @ string / hello_world/>

< / textview > < / relativelayout >





运行应用程序后,Web服务响应在模拟器中显示为null。你能不能在这个方面给我建议。我必须尝试差不多但没有得到出局。



问候,



Ramesh.N

解决方案

  public   final   static  字符串 SOAP_ACTION =   http://tempuri.org/CelsiusToFahrenheit; 
public static final < span class =code-sdkkeyword> String NAMESPACE = http://tempuri.org/ ;



更改为

< pre lang =   java> public  final   static  字符串 SOAP_ACTION =   http ://www.w3schools.com/webservices/CelsiusToFahrenheit; 
public static final < span class =code-sdkkeyword> String
NAMESPACE = http://www.w3schools.com / web服务/;


Good Afternoon,

Here I use Android Handlers to perform the background task.To access SOAP based web service from Android using ksoap2 library.I have to follow the below steps to complete this task.

1.Add ksoap2 to the java build path of Android project.
2.Code for the MainActivity.java class

package com.example.webservicecalling;

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

import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;



import com.example.webservicecalling.R;

public class MainActivity extends ActionBarActivity {
	
   	public final static String URL = "http://www.w3schools.com/webservices/tempconvert.asmx";
	    public final static String SOAP_ACTION = "http://tempuri.org/CelsiusToFahrenheit";
	
	
	public static final String NAMESPACE = "http://tempuri.org/";
	
	private static final String METHOD = "CelsiusToFahrenheit";
	
	  
	private TextView temperatureTxt;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		init();
}

	private void init() {
		temperatureTxt = (TextView) findViewById(R.id.textView1);
		
		new ConversionAsyncTask().execute();
	}
	
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		// Handle action bar item clicks here. The action bar will
		// automatically handle clicks on the Home/Up button, so long
		// as you specify a parent activity in AndroidManifest.xml.
		int id = item.getItemId();
		if (id == R.id.action_settings) {
			return true;
		}
		return super.onOptionsItemSelected(item);
	}
     
	private class ConversionAsyncTask extends AsyncTask<void,> {
		private SoapPrimitive response;

		@Override
		protected Void doInBackground(Void... params) {
			SoapSerializationEnvelope soapEnvelope = new SoapSerializationEnvelope(
					SoapEnvelope.VER11);
			
			SoapObject request = new SoapObject(NAMESPACE, METHOD);
			soapEnvelope.setOutputSoapObject(request);
			
			soapEnvelope.dotNet = true;
			
			try {
				HttpTransportSE aht = new HttpTransportSE(URL);
				aht.call(SOAP_ACTION, soapEnvelope);
				request.addProperty("Celsius","32");
				response = (SoapPrimitive) soapEnvelope.getResponse();
			
			} catch (Exception e) {
				e.printStackTrace();
			}
			
               return null;
		}
		
		@Override
		protected void onPostExecute(Void result) {
			super.onPostExecute(result);
			temperatureTxt.setText("Status:" + response);
			           
		}
	}
		 

}



3.Add internet permission to AndroidManifest before the application tag

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


4.Code for the activity_main.xml

<relativelayout 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:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.webservicecalling.MainActivity" >

    <textview>
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world"  />

</textview></relativelayout>



After running the application, web service response displayed as null in emulator. Could you please suggest me on this.i have to tried almost but not getting the out put.

Regards,

Ramesh.N

解决方案

public final static String SOAP_ACTION = "http://tempuri.org/CelsiusToFahrenheit";
public static final String NAMESPACE = "http://tempuri.org/";


change to

<pre lang="java">public final static String SOAP_ACTION = "http://www.w3schools.com/webservices/CelsiusToFahrenheit";
public static final String NAMESPACE = "http://www.w3schools.com/webservices/";


这篇关于使用KSOAP 2从Android访问.NET Web服务。的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆