如何使用android中的kSoap2在AsyncTask中获取soapObjet返回
我想打电话给ASMX网络服务, 如何从doInBackground取回活动中的SoapObject或List ,web服务工作正常,它在日志文件上显示值 ,我的代码是,文件,我称之为web服务如何使用android中的kSoap2在AsyncTask中获取soapObjet返回,android,android-asynctask,asmx,Android,Android Asynctask,Asmx,我想打电话给ASMX网络服务, 如何从doInBackground取回活动中的SoapObject或List ,web服务工作正常,它在日志文件上显示值 ,我的代码是,文件,我称之为web服务 import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.ksoap2.SoapEnvelope; import org.ksoap2.serialization.SoapObject
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
import org.xmlpull.v1.XmlPullParserException;
import android.util.Log;
public class WebserviceMainCategory {
static String SOAP_ACTION = "http://tempuri.org/loadProductCatagory";
static String METHOD_NAME = "loadProductCatagory";
static String NAME_SPACE = "http://tempuri.org/";
static String URL = "http://74.53.87.146/seharwebservice/Service.asmx";
public List<String> main_items = new ArrayList<String>();
public static String[] namess ;
static int s ;
public static SoapObject soap;
public SoapObject webServiceMain_list() {
SoapObject request = new SoapObject(NAME_SPACE, METHOD_NAME);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.implicitTypes = true;
envelope.setAddAdornments(false);
envelope.setOutputSoapObject(request);
HttpTransportSE httpTransportSe = new HttpTransportSE(URL);
httpTransportSe.debug = true;
try {
httpTransportSe.call(SOAP_ACTION, envelope);
Object result = envelope.getResponse();
soap = (SoapObject) result;
/*
SoapObject result2nd = (SoapObject) result;
s = result2nd.getPropertyCount();
//String[]arrayLis = new String[s];
namess = new String[s];
for(int i=0; i<result2nd.getPropertyCount(); i++)
{
Log.d("ddd", result2nd.getPropertyAsString(i));
namess[i]=result2nd.getPropertyAsString(i);
Log.d("array", namess[i]);
main_items.add(result2nd.getPropertyAsString(i));
}
*/
} catch (IOException e) {
e.printStackTrace();
} catch (XmlPullParserException e) {
e.printStackTrace();
}
return soap;
}
}
import java.io.IOException;
导入java.util.ArrayList;
导入java.util.List;
导入org.ksoap2.SoapEnvelope;
导入org.ksoap2.serialization.SoapObject;
导入org.ksoap2.serialization.SoapSerializationEnvelope;
导入org.ksoap2.transport.HttpTransportSE;
导入org.xmlpull.v1.XmlPullParserException;
导入android.util.Log;
公共类WebserviceMainCategory{
静态字符串SOAP_ACTION=”http://tempuri.org/loadProductCatagory";
静态字符串方法\u NAME=“loadProductCatagory”;
静态字符串名称\u空格=”http://tempuri.org/";
静态字符串URL=”http://74.53.87.146/seharwebservice/Service.asmx";
public List main_items=new ArrayList();
公共静态字符串[]名称;
静态int-s;
公共静态soapobjectsoap;
公共SoapObject WebService主列表(){
SoapObject请求=新的SoapObject(名称\空间、方法\名称);
SoapSerializationEnvelope=新的SoapSerializationEnvelope(
第11版);
envelope.dotNet=true;
envelope.implicitTypes=true;
信封.装饰(假);
envelope.setOutputSoapObject(请求);
HttpTransportSE HttpTransportSE=新的HttpTransportSE(URL);
httpTransportSe.debug=true;
试一试{
调用(SOAP_操作,信封);
对象结果=envelope.getResponse();
soap=(SoapObject)结果;
/*
SoapObject result2nd=(SoapObject)结果;
s=result2nd.getPropertyCount();
//String[]arrayLis=新字符串[s];
names=新字符串[s];
对于(inti=0;i您喜欢这样做
private SoapObject aa;
class Main_itemsList extends AsyncTask<Void, Void, SoapObject> {
@Override
protected SoapObject doInBackground(Void... params) {
// this is executed in a background thread.
// the result is returned to the UI thread via onPostExecute
WebserviceMainCategory mAuth = new WebserviceMainCategory();
return mAuth.webServiceMain_list();
}
@Override
protected void onPostExecute(SoapObject result) {
// aa is inside your Activity / Fragment which
// contains this class
aa = result;
}
}
// you just need to start the task somewhere
public void onSomething() {
// this will set "aa" when it's done.
new Main_itemsList().execute();
}
私有对象aa;
类Main\u itemsList扩展异步任务{
@凌驾
受保护的SoapObject doInBackground(无效…参数){
//这是在后台线程中执行的。
//结果通过onPostExecute返回给UI线程
WebserviceMainCategory mAuth=新的WebserviceMainCategory();
返回mAuth.webServiceMain_list();
}
@凌驾
受保护的void onPostExecute(SoapObject结果){
//aa在你的活动/片段中
//包含此类
aa=结果;
}
}
//你只需要在某个地方开始这项任务
在某物上的公共无效(){
//完成后,将设置“aa”。
新的Main_itemsList().execute();
}
如果启动一个AsyncTask
,它将在后台线程中执行您在doInBackground
中定义的任何操作。返回的结果将传输回UI线程,以onPostExecute
。在那里,您将结果“发布”到您的活动或片段中。您喜欢这样做吗
private SoapObject aa;
class Main_itemsList extends AsyncTask<Void, Void, SoapObject> {
@Override
protected SoapObject doInBackground(Void... params) {
// this is executed in a background thread.
// the result is returned to the UI thread via onPostExecute
WebserviceMainCategory mAuth = new WebserviceMainCategory();
return mAuth.webServiceMain_list();
}
@Override
protected void onPostExecute(SoapObject result) {
// aa is inside your Activity / Fragment which
// contains this class
aa = result;
}
}
// you just need to start the task somewhere
public void onSomething() {
// this will set "aa" when it's done.
new Main_itemsList().execute();
}
私有对象aa;
类Main\u itemsList扩展异步任务{
@凌驾
受保护的SoapObject doInBackground(无效…参数){
//这是在后台线程中执行的。
//结果通过onPostExecute返回给UI线程
WebserviceMainCategory mAuth=新的WebserviceMainCategory();
返回mAuth.webServiceMain_list();
}
@凌驾
受保护的void onPostExecute(SoapObject结果){
//aa在你的活动/片段中
//包含此类
aa=结果;
}
}
//你只需要在某个地方开始这项任务
在某物上的公共无效(){
//完成后,将设置“aa”。
新的Main_itemsList().execute();
}
如果启动AsyncTask
,它将在后台线程中执行您在doInBackground
中定义的任何操作。返回的结果将传输回UI线程,以onPostExecute
。在那里,您将获取结果并“发布”将其添加到您的活动或片段。谢谢您的回复。.我创建了一个静态SoapObject。.当我调用函数时,它没有给我错误,但当我访问aa SoapObject时,它给我错误,即使它没有在日志文件new Main_itemsList()上打印aa的值。对于(int i=0;i您无法立即访问aa
,因为在AsyncTask
在将来某个时候完成之前,它不会被设置。如果您想打印它,请从onPostExecute
触发一个问题..我想调用web服务进行登录,获取asmx web服务的用户名和密码,如何强制延迟一些时间从webservice获取用户名和密码的输入法…我调用sleep,但应用程序崩溃..谢谢如果您执行异步操作,您不会等待它们发生,而是使用异步操作完成时发生的事件触发所有更新。在您的情况下:启动登录任务,然后不执行任何操作,只需将UI保留在某个时间“请稍候,我正在加载东西”状态,一旦加载完成,您将再次更新UI以处理感谢您的回复..我创建了一个静态SoapObject..当我调用函数时,它没有给我错误,但当我访问aa SoapObject时,它给我错误,即使它没有在日志文件new Main_itemsList()上打印aa的值。execute()对于(int i=0;i您无法立即访问aa
,因为在AsyncTask
在将来某个时候完成之前,它不会被设置。如果您想打印它,请从onPostExecute
触发一个问题..我想调用web服务进行登录,获取asmx web服务的用户名和密码,如何强制延迟一些时间从webservice获取用户名和密码的输入法…我调用sleep,但应用程序崩溃..谢谢如果您执行异步操作,您不会等待它们发生,而是使用异步操作完成时发生的事件触发所有更新。在您的情况下:启动日志