0

这是我项目活动中的代码:

    CustomClass custom = new CustomClass(); 
    //Passing an array list
    result = custom.getResults(list);

CustomClass是库项目中的一个类,该方法getResults(list)启动一个AsyncTask.

getResults()方法 :

    public List<String> getResults(List<String> string){        
        List<String> result= new ArrayList<String>();
        BackgroundTask task =  new BackgroundTask();
        task.execute(string);
        result= task.get();
        return result;
    }

我的异步任务:

    public class BackgroundTask extends AsyncTask<List<String>, Integer, List<String> >{
    List<String> results= new ArrayList<String>();
    @Override
    protected List<String> doInBackground(List<String>... params) {
        for (int i=0; i<params[0].size();i++) {
            // someOperation
        }
        return results; 
    }
    @Override
    protected void onPostExecute(List<String> result) {
        // TODO Auto-generated method stub
        super.onPostExecute(result);
    }
    @Override
    protected void onPreExecute() {
        // TODO Auto-generated method stub
        super.onPreExecute();
    }
    @Override
    protected void onProgressUpdate(Integer... values) {
        // TODO Auto-generated method stub
        super.onProgressUpdate(values);
    }


}

问题:AsyncTask没有启动。当我调试并尝试进入AsyncTask我得到的类时The source attachment does not contain the source for the file classloader.class。有人可以在这里帮助我吗?谢谢你。

4

1 回答 1

1

get() 方法阻塞了 UI 线程,这意味着 onPreExecute 无法运行(它必须在 UI 线程中运行)因此永远不会启动后台线程。

摆脱对 get() 的调用,并将“返回值”逻辑移至 onPostExecute。

当你在 UI 线程中时,永远不要阻塞。

于 2013-09-13T17:46:38.723 回答