0

変数が保存されるクラスの新しいインスタンスを毎回作成し、BaseAdapter として拡張された独自のアダプターからそれらをロードできるようにすることで、ListView にエントリをロードする AsyncTask があります。

クラスは次のようになります。

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[])

アプリがクラッシュしてバックグラウンド スレッドから ListView が変更されることがあるため、特にcustomAdapter.notifyDataSetChanged();が実行されることが重要です。onPostExecuteonProgressUpdate

PictureResults をタイプとして使用できないのはなぜですか?

ところで:これは私がAsyncTaskを実行する方法です:

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

5 に答える 5

1

の 3 番目の型パラメーターAsyncTaskPictureResultsVoid

class getPictureDataTask extends AsyncTask<Long, String, PictureResults>

の 3 番目の Parameter TypeAsyncTaskは、どのような種類のデータ結果を返す必要があるかということです。から結果を返したくない場合はdoInBackground()、 を使用Voidしてからreturn null;

于 2013-05-20T02:02:15.293 に答える
0

PictureResults を返したい場合は、AsyncTask で宣言する必要があります。

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

AsyncTask を実装する際に、山かっこ内の 3 つのパラメーターを確認してください。

AsyncTask<Params, Progress, Result>  

Params は、execute() でタスクを開始するときに渡す doInBackground() メソッドによって取得されます。
Result は doInBackground() メソッドによって返され、onPostExecute(Result ret) メソッドによって取得されます。
それぞれは、カスタム タスク クラスを実装するときに定義したタイプである必要があります。
詳細はこちら

于 2013-05-20T02:14:44.037 に答える
0

AsyncTask を AsyncTask に変更する必要があります

于 2013-05-20T02:17:02.733 に答える
0

これを AsyncTask に変更する必要があります

于 2013-05-20T01:45:49.267 に答える