[android] AsyncTask의 progressDialog


Answers

뷰 수정자를 onPostExecute로 이동하면 고정 코드가 다음과 같이 고정됩니다.

public class Soirees extends ListActivity {
    private List<Message> messages;
    private TextView tvSorties;

    //private MyProgressDialog dialog;
    @Override
    public void onCreate(Bundle icicle) {

        super.onCreate(icicle);

        setContentView(R.layout.sorties);

        tvSorties=(TextView)findViewById(R.id.TVTitle);
        tvSorties.setText("Programme des soirées");

        new ProgressTask(Soirees.this).execute();


   }


    private class ProgressTask extends AsyncTask<String, Void, Boolean> {
        private ProgressDialog dialog;
        List<Message> titles;
        private ListActivity activity;
        //private List<Message> messages;
        public ProgressTask(ListActivity activity) {
            this.activity = activity;
            context = activity;
            dialog = new ProgressDialog(context);
        }



        /** progress dialog to show user that the backup is processing. */

        /** application context. */
        private Context context;

        protected void onPreExecute() {
            this.dialog.setMessage("Progress start");
            this.dialog.show();
        }

            @Override
        protected void onPostExecute(final Boolean success) {
                List<Message> titles = new ArrayList<Message>(messages.size());
                for (Message msg : messages){
                    titles.add(msg);
                }
                MessageListAdapter adapter = new MessageListAdapter(activity, titles);
                activity.setListAdapter(adapter);
                adapter.notifyDataSetChanged();

                if (dialog.isShowing()) {
                dialog.dismiss();
            }

            if (success) {
                Toast.makeText(context, "OK", Toast.LENGTH_LONG).show();
            } else {
                Toast.makeText(context, "Error", Toast.LENGTH_LONG).show();
            }
        }

        protected Boolean doInBackground(final String... args) {
            try{    
                BaseFeedParser parser = new BaseFeedParser();
                messages = parser.parse();


                return true;
             } catch (Exception e){
                Log.e("tag", "error", e);
                return false;
             }
          }


    }

}

@ 블라디미르, 코드가 매우 도움이되었습니다.

Question

HTTP 서버에서 RSS 피드를로드하는 동안 사용자 지정 progressdialog를 표시하려고하지만 하드 검색을 수행하지 못했지만이 작업을 수행하는 데 아무런 도움이되지 않았습니다. 해결책은 AsyncTask를 사용해야한다는 것이지만 혼란 스럽습니다. 이 AsyncTask에 건네주는 파라미터. 내 활동은 다음과 같습니다.

    import java.util.ArrayList;
import java.util.List;

import com.cyberesa.info.BaseFeedParser;
import com.cyberesa.info.Message;
import com.cyberesa.info.MessageListAdapter;
import com.cyberesa.info.R;

import android.app.ListActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;

public class Soirees extends ListActivity {
    private List<Message> messages;
    private TextView tvSorties;
    private MyProgressDialog dialog;
    @Override
    public void onCreate(Bundle icicle) {

        super.onCreate(icicle);

        setContentView(R.layout.sorties);

        tvSorties=(TextView)findViewById(R.id.TVTitle);
        tvSorties.setText("Programme des soirées");

        loadFeed();

   }

    private void loadFeed(){
        try{
            BaseFeedParser parser = new BaseFeedParser();
            messages = parser.parse();
            List<Message> titles = new ArrayList<Message>(messages.size());
            for (Message msg : messages){
                titles.add(msg);
            }
            MessageListAdapter adapter = new MessageListAdapter(this,titles);
            this.setListAdapter(adapter);
            adapter.notifyDataSetChanged();

        } catch (Throwable t){
            Log.e("ImageLoader",t.getMessage(),t);
        }
    }

}

AsyncTask를 여기에 추가 할 수있게 도와 주시겠습니까?

고마워, Houssem







며칠 전이 문제에 대한 아주 멋진 해결책을 발견했습니다. here 에 대해 읽어보십시오. 두 단어로 Mike는 ProgressDialog와 AsyncTask를 중재하는 AsyncTaskManager를 만들었습니다. 이 솔루션을 사용하는 것은 매우 쉽습니다. 프로젝트에 여러 인터페이스와 여러 클래스를 포함시키고 활동에 간단한 코드를 작성하고 BaseTask에서 새로운 AsyncTask를 중첩하면됩니다. 또한 유용한 팁이 있기 때문에 의견을 읽으라고 조언합니다.




Links