使用KSOAP 2从Android访问.NET Web服务。 [英] Accessing a .NET Web Service from an Android using KSOAP 2.
问题描述
下午好,
这里我使用Android处理程序来执行后台任务。使用ksoap2库从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_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 >
运行应用程序后,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屋!