0

我有一个 AsyncTask 通过每次创建一个类的新实例来加载 ListView 中的条目,其中将保存变量并让它们从扩展为 BaseAdapter 的自己的适配器加载。

该类如下所示:

public class PictureResults
{
    private long id;
    private String pictureURL;

    public void setId(long id)
    {
        this.id = id;
    }

    public long getId()
    {
        return id;
    }

    public void setPictureURL(String pictureURL)
    {
        this.pictureURL = pictureURL;
    }

    public String getPictureURL()
    {
        return pictureURL;
    }
}

这是我的 AsyncTask 类:

private class getPictureDataTask extends AsyncTask<Long, String, Void>
    {
        protected PictureResults doInBackground(Long... param)
        {
                PictureResults pr;

                pr = new PictureResults();
                pr.setId(param[0]);
                pr.setPictureURL("http://www.myurl.com");

                return pr;
        }

        protected void onProgressUpdate(String... response)
        {
            //do nothing
        }

        protected void onPostExecute(PictureResults ret)
        {
            picResults.add(ret); //picResults is an ArrayList<PictureResults>
            ret.loadPicture(customAdapter);
            customAdapter.notifyDataSetChanged();
        }
    }

出现的主要问题是 Eclipse 让我知道以下内容:

The return type is incompatible with AsyncTask<Long,String,Void>.doInBackground(Long[])

重要的是,特别是customAdapter.notifyDataSetChanged();将在其中执行,onPostExecute因为onProgressUpdate有时我的应用程序崩溃导致从后台线程更改 ListView。

为什么我不能使用 PictureResults 作为类型???

顺便说一句:这就是我执行 AsyncTask 的方式:

Long hey = (long) 1;
new getPictureDataTask().execute(hey);
4

5 回答 5

1

的第三个类型参数不AsyncTask应该PictureResultsVoid

class getPictureDataTask extends AsyncTask<Long, String, PictureResults>

因为第三个参数类型AsyncTask是应该返回什么样的数据结果。如果您不想从 中返回任何结果doInBackground(),请使用Void然后return null;

于 2013-05-20T02:02:15.293 回答
0

在实现 AsyncTask 时查看尖括号中的 3 个参数。

AsyncTask<Params, Progress, Result>  

参数由 doInBackground() 方法获取,当您使用 excute() 启动任务时传递它;
结果应该由 doInBackground() 方法返回,并将由 onPostExecute(Result ret) 方法获取。
每个都应该是您在实现自定义任务类时定义的类型。
更多信息在这里

于 2013-05-20T02:14:44.037 回答
0

您应该将 AsyncTask 更改为 AsyncTask

于 2013-05-20T02:17:02.733 回答
0

当你想要返回 PictureResults 时,你应该在 AsyncTask 中声明。

private class getPictureDataTask extends AsyncTask<Long, String, PictureResults>
{
    ......
}
于 2013-05-20T01:58:49.687 回答
0

您应该将其更改为 AsyncTask

于 2013-05-20T01:45:49.267 回答