0

我已经设置了一个异步任务,它将从 wsdl 获取国家列表,并从结果中创建一堆国家对象并将这些对象添加到国家类文件中的数组列表中。

我希望能够运行这个将填充数组列表的异步任务,然后从另一个视图能够根据用户选择的内容从数组列表中调用特定索引。

我尝试创建一个扩展 AsyncTask 的类,并且我从我创建的应用程序的姜饼版本中插入了相同的代码,该代码运行良好,因为可以从主线程运行网络操作

The type getWSDL2 must implement the inherited abstract method AsyncTask.doInBackground(Object...)

我没有任何对象可以传递给这个我所有的变量和东西来获取wsdl数据都在异步任务中,我需要的所有数据都从异步任务中分配给arraylist。

public class getWSDL2 extends AsyncTask {

    protected void doInBackground() 
    {
       ........
    }
4

2 回答 2

0

我理解你的问题的方式你不确定如何实现,AsyncTask因为你不需要将值传递给它。您需要的所有变量和数据都包含在代码中,这些代码将与您的服务器执行事务以下载您打算显示的任何内容。

公共类 getWSDL2 扩展 AsyncTask {

    protected Void doInBackground(Void... params) { 
        //All I/O code here   
    }     

    protected Void onPostExecute(){
        //Anything that needs to run on the UI thread here
    }    

}

AsyncTask上面列出了的一般结构。该doInBackground方法必须包含任何 I/O 函数,而您所做的任何事情都涉及视图,即显示您的查询结果保存在数组列表中,必须从onPostExecute运行在 UI 线程上的 调用。

从我收集到的解决方案很简单。将服务器事务所需的所有代码放入doInBackground方法中。如果您需要在视图中显示该事务的结果,只需添加一个返回语句doInBackground并包括您将在为AsyncTask. 例如,如果您要显示方法中ArrayList生成的结果doInBackground

公共类 getWSDL2 扩展 AsyncTask {

    protected ArrayList<String> doInBackground(Void... params) { 
        //All I/O code here
        return nameOfArrayListYouBuild   
    }     

    protected Void onPostExecute(ArrayList<String> whatever){
       //use ArraList whatever to display your stuff
    }    

}

或者,如果您不需要在 UI 线程上显示任何内容或运行任何功能,则根本不要使用该onPostExecute方法。

公共类 getWSDL2 扩展 AsyncTask {

    protected Void doInBackground(Void... params) { 
        //All I/O code here
        return null   
    }     

}

您可以构建您的任务,以便它只使用doInBackground

于 2013-05-08T16:45:33.900 回答
0

传递 Void... 作为 doInBackground 的参数

protected void doInBackground(Void... params) 
{
   ........
}
于 2013-05-08T16:17:34.653 回答