2013-05-10 20 views
1

我是Android开发的新手。我正在尝试开发一个应用程序,它将与.net webservice连接以便检索数据。我想用异步任务进行ksoap2调用。我如何用asynctask将它称为asyncronus?如何在异步任务中创建ksoap2调用?

我的SOAPCall类是

public class SoapCall { 

public final static String SOAP_ACTION = "http://www.alpha.net.com/ExecuteEBSCommand"; 

public final static String OPERATION_NAME = "ExecuteEBSCommand"; 

public final static String NAMESPACE = "http://www.alpha.net.com"; 

public final static String URL = "http://192.168.2.100/Ebs2Alpha/Service.asmx"; 





public String connection(String Command, String CommandParameters) throws Throwable, Throwable { 
    String response = null; 
    SoapObject Request = new SoapObject(NAMESPACE, OPERATION_NAME); 
    Request.addProperty("strCommand", Command); 
    Request.addProperty("strCommandParameters", CommandParameters); 



    SoapSerializationEnvelope soapEnvelope = new SoapSerializationEnvelope(
      SoapEnvelope.VER11); 
    soapEnvelope.dotNet = true; 
    soapEnvelope.setOutputSoapObject(Request); 
    // Needed to make the internet call 

    // Allow for debugging - needed to output the request 

     HttpTransportSE androidHttpTransport = new HttpTransportSE(URL); 
     androidHttpTransport.debug = true; 
     // this is the actual part that will call the webservice 
     androidHttpTransport.call(SOAP_ACTION, soapEnvelope); 

     // Get the SoapResult from the envelope body. 
     SoapObject result = (SoapObject) soapEnvelope.bodyIn; 

     response = result.getProperty(0).toString(); 


    return response; 
    } 

}

到目前为止,我得到通过调用主要活动的连接方法与

SoapCall call1= new SoapCall(); 

call1.connection("get_clients", "%"); 

回答

2

使用asynctask很简单。这是一个例子。

public class MyTask extends AsyncTask<String, Integer, String>{ 


    @Override 
    protected String doInBackground(String... params) { 
    String response = null; 
    SoapObject Request = new SoapObject(NAMESPACE, OPERATION_NAME); 
    Request.addProperty("strCommand", params[0]); 
    Request.addProperty("strCommandParameters", params[1]); 



    SoapSerializationEnvelope soapEnvelope = new SoapSerializationEnvelope(
     SoapEnvelope.VER11); 
    soapEnvelope.dotNet = true; 
    soapEnvelope.setOutputSoapObject(Request); 
    // Needed to make the internet call 

    // Allow for debugging - needed to output the request 

    HttpTransportSE androidHttpTransport = new HttpTransportSE(URL); 
    androidHttpTransport.debug = true; 
    // this is the actual part that will call the webservice 
    androidHttpTransport.call(SOAP_ACTION, soapEnvelope); 

    // Get the SoapResult from the envelope body. 
    SoapObject result = (SoapObject) soapEnvelope.bodyIn; 

    response = result.getProperty(0).toString(); 


    return response; 
} 

}

和呼叫与参数的任务。

MyTask myTask = new MyTask(); 
myTask.execute(new String[] {Command, CommandParameters}); 

希望它会有所帮助。

0

响应我建议你使用AsyncTaskLoader对我来说比AsyncTask更容易。 看一看here,这个例子非常广泛,看起来很吓人,你可能会发现更简单的。这个想法是,你的Activity实现LoaderCallbacks用于创建加载器和一个在加载器完成时被调用的方法。您通过LoaderManager“开始”一个装载机。 AsynctaskLoader是一个类extends AsyncTaskLoader并做异步的东西。

我给你一个简单的例子:

这是AsyncTaskLoader:

public class StartupLoader extends AsyncTaskLoader<Boolean> { 

Context context; 

public StartupLoader(Context context) { 
    super(context); 
    this.context = context; 
    forceLoad(); 

} 

@Override 
public Boolean loadInBackground() { 

    // DO STUFF! 

    return true; 
} 

@Override 
protected void onStopLoading() { 

} 

@Override 
public void onCanceled(Boolean data) { 
    super.onCanceled(data); 

} 

@Override 
protected void onReset() { 
    super.onReset(); 



} 

} 

这是你在将启动加载程序的活动,这是一个内部类:

public class StartupCallback implements 
     LoaderManager.LoaderCallbacks<Boolean> { 
    @Override 
    public void onLoadFinished(Loader<Boolean> loader, Boolean succ) { 

     // Here you get your results back 

    } 

    @Override 
    public Loader<Boolean> onCreateLoader(int id, Bundle args) { 

     return new StartupLoader(getApplicationContext()); 
    } 

    @Override 
    public void onLoaderReset(Loader<Boolean> loader) { 

    } 
} 

这就是你如何开始从徘徊无论你想要的装载机(即活动内):

StartupCallback startupCallback = new StartupCallback(); 
getSupportLoaderManager().initLoader(0, null, startupCallback); 

其中0是您给加载器的ID,null是一个参数的包。 祝你好运:)