0

AsyncTaskを実行するアプリを作成しましたが、コードの一部は次のようにリストされています。問題は、AsyncTaskがコード「newAddImageTask()。execute();」を実行することで開始する場合です。スレッドハンドラーでは、タスクが開始され、すべてが正しいように見えます。ただし、「doInBackground」メソッドのすべてのコードが実行された後、最終的にアプリは「doInBackground」メソッドのままになります。タスクは「onPostExecute」メソッドに移動できません。(つまり、ダイアログを閉じることはできません...)何が問題になっていますか?

助けてくれてありがとう......

private Handler handleFetchResult = new Handler() {
    @Override
    public void handleMessage(Message msg) {
        progressDialog.dismiss();
        Log.d(TAG, "Start handle fetch result");
        try {
            JSONArray ja = new JSONArray(fetchResult);
            Log.d(TAG, "JSON Array Length = " + ja.length());
            JSONObject jo = new JSONObject();

            for (int i = 0; i < ja.length(); i++) {
                jo = ja.getJSONObject(i);
                PhotoURLs.add(PAT_url + jo.getString("filePath"));
                Log.d(TAG, PhotoURLs.get(i));
            }
        } catch (JSONException e) {
            Log.d(TAG, "Fetch result error: " + e.getLocalizedMessage());
            e.printStackTrace();
        }

        //TODO: display thumbnail
        new AddImageTask().execute();

    }//void handleMessage
};//Handler handleFetchResult


class AddImageTask extends AsyncTask<Void, Void, Void> {

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        loadThumbnailDialog.show(SitePhotoGallery.this, "Fetch thumbnails from server",
                "Loading...", true, true);
        Log.d("AddImageTask.onPreExecute","onPreExecute");
    }
    @Override
    protected Void doInBackground(Void... unused) {
        // TODO Auto-generated method stub
        for (String url : PhotoURLs) {

            String filename = url.substring(url.lastIndexOf("/") + 1, url.length());

            String thumburl = url.substring(0, url.lastIndexOf("/")+1);



            imgAdapter.addItem(LoadThumbnailFromURL(thumburl + filename));
            publishProgress();

        }
        Log.d("AddImageTask.doInBackground","doInBackground");
        return null ;
    }

    @Override
    protected void onProgressUpdate(Void... unused) {
        super.onProgressUpdate();
        imgAdapter.notifyDataSetChanged();
        Log.d("AddImageTask.onProgressUpdate","OnProgressUpdate");

    }

    protected void onPostExecute(Void... unused) {
        super.onPostExecute(null);
        loadThumbnailDialog.dismiss();
        Log.d("AddImageTask.onPostExecute","onPostExecute");

    }

}
4

1 に答える 1

1

パラメータではなくパラメータをonPostExecute()取る必要があるためだと思います。( Soxxeh が上記のコメントで指摘したように指定する必要があります。)VoidVoid...@Override

于 2012-07-10T02:31:20.900 に答える