progressDialog在AsyncTask的停止旋转 [英] progressDialog in AsyncTask stop spinning

查看:237
本文介绍了progressDialog在AsyncTask的停止旋转的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图把ProgressDialog在纺纱的AsyncTask的同时,它加载一些信息。问题是,它开始很好,但突然停止旋转,在那一刻似乎应用无法正常运行了。纺纱刚刚获得堆栈,直到当所有的信息被加载它消失的信息是否正确显示。下面是我使用的AsyncTask的:

 公共类LoadCarsTask扩展的AsyncTask<弦乐,租车,列表与LT;汽车>> {    私人SearchFragmentActivity SMA;
    私人ListFragment片段;    公共LoadCarsTask(ListFragment片段){
        this.fragment =片段;
        对话框=新ProgressDialog(fragment.getActivity());
    }    @覆盖
    在preExecute保护无效(){
        // TODO自动生成方法存根
        super.on preExecute();
        适配器=新SearchCarListAdapter(SearchCarListActivity.this.getActivity(),showedCars,showedDistance,showedReviews,showedPhotos);
        dialog.setMessage(寻找汽车......);
        dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
        dialog.show();
    }    公共SearchFragmentActivity getSma(){
        返回SMA;
    }    公共无效setSma(SearchFragmentActivity SMA){
        this.sma = SMA;
    }    @覆盖
    保护列表与LT;汽车> doInBackground(字符串... PARAMS){
        maxPerHour = Double.parseDouble(filterparams [0]);
        maxPerKm = Double.parseDouble(filterparams [1]);
        maxDistance = Double.parseDouble(filterparams [2]);
        经度= Double.parseDouble(filterparams [3]);
        纬度= Double.parseDouble(filterparams [4]);
        URL网址;
        尝试{
            //一个长的计算放在这里
        返回车;
    }    @覆盖
    保护无效onProgressUpdate(汽车...值){
        // TODO自动生成方法存根
        super.onProgressUpdate(值);
    }    @覆盖
    保护无效onPostExecute(列表<汽车>的结果){
        super.onPostExecute(结果);
        SearchFragmentActivity.setCars(车);
        sfa.setUpDistances();
        距离= SearchFragmentActivity.getDistances();
        SETU previews();
        setUpPhotos();
        而(carsCount&所述; carsNumber&放大器;&放大器; carsCount&下; cars.size()){
            showedCars.add(cars.get(carsCount));
            showedDistance.add(distance.get(carsCount));
            showedPhotos.add(photos.get(carsCount));
            showedReviews.add(reviews.get(carsCount));
            carsCount ++;
        }
        适配器=新SearchCarListAdapter(SearchCarListActivity.this.getActivity(),showedCars,showedDistance,showedReviews,showedPhotos);
        adapter.setCurrentLocation(LOC);
        setListAdapter(适配器);
        如果(dialog.isShowing())
            dialog.dismiss();
        //sma.showAvailableCarsOnMap();
    }}
  }


解决方案

 私有类DownloadFilesTask扩展的AsyncTask< URL,为Integer,Long> {
     保护龙doInBackground(URL网址...){
         诠释计数= urls.length;
         长总计TOTALSIZE = 0;
         的for(int i = 0; I<计数;我++){
             总计TOTALSIZE + = Downloader.downloadFile(网址[I]);
             publishProgress((INT)((I /(浮点)数)* 100));
             //早逃生,如果取消()被调用
             如果(isCancelled())破;
         }
         返回总计TOTALSIZE;
     }     保护无效onProgressUpdate(整数...进度){
         setProgressPercent(进展[0]);
     }     保护无效onPostExecute(长效){
         的ShowDialog(已下载+结果+字节);
     }
 }

此链接以获取更多信息。

I am trying to put a ProgressDialog in an AsyncTask with spinning while it loads some info. The problem is that it starts well but suddenly it stops spinning, in one moment it seems that the app is not working any more. The spinning just get stack until when all the info is loaded it disappears and the information is showed properly. Here is the AsyncTask that I am using:

   public class LoadCarsTask extends AsyncTask<String, Car, List<Car>>{

    private SearchFragmentActivity sma;
    private ListFragment fragment;

    public LoadCarsTask (ListFragment fragment){
        this.fragment = fragment;
        dialog = new ProgressDialog(fragment.getActivity());
    }

    @Override
    protected void onPreExecute() {
        // TODO Auto-generated method stub
        super.onPreExecute();
        adapter = new SearchCarListAdapter(SearchCarListActivity.this.getActivity(), showedCars, showedDistance, showedReviews, showedPhotos);
        dialog.setMessage("Finding Cars...");
        dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
        dialog.show();
    }

    public SearchFragmentActivity getSma() {
        return sma;
    }

    public void setSma(SearchFragmentActivity sma) {
        this.sma = sma;
    }



    @Override
    protected List<Car> doInBackground(String... params) {
        maxPerHour = Double.parseDouble(filterparams[0]);
        maxPerKm = Double.parseDouble(filterparams[1]);
        maxDistance = Double.parseDouble(filterparams[2]);
        longitude = Double.parseDouble(filterparams[3]);
        latitude = Double.parseDouble(filterparams[4]);
        URL url;
        try {
            //A long calculation goes here
        return cars;
    }

    @Override
    protected void onProgressUpdate(Car... values) {
        // TODO Auto-generated method stub
        super.onProgressUpdate(values);         
    }

    @Override
    protected void onPostExecute(List<Car> result) {
        super.onPostExecute(result);
        SearchFragmentActivity.setCars(cars);
        sfa.setUpDistances();
        distance = SearchFragmentActivity.getDistances();
        setUpReviews();
        setUpPhotos();
        while (carsCount<carsNumber && carsCount<cars.size()){
            showedCars.add(cars.get(carsCount));
            showedDistance.add(distance.get(carsCount));
            showedPhotos.add(photos.get(carsCount));
            showedReviews.add(reviews.get(carsCount));
            carsCount++;
        }
        adapter = new SearchCarListAdapter(SearchCarListActivity.this.getActivity(), showedCars, showedDistance, showedReviews, showedPhotos);
        adapter.setCurrentLocation(loc);
        setListAdapter(adapter);
        if(dialog.isShowing())
            dialog.dismiss();
        //sma.showAvailableCarsOnMap(); 
    }

}


  }

解决方案

    private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> {
     protected Long doInBackground(URL... urls) {
         int count = urls.length;
         long totalSize = 0;
         for (int i = 0; i < count; i++) {
             totalSize += Downloader.downloadFile(urls[i]);
             publishProgress((int) ((i / (float) count) * 100));
             // Escape early if cancel() is called
             if (isCancelled()) break;
         }
         return totalSize;
     }

     protected void onProgressUpdate(Integer... progress) {
         setProgressPercent(progress[0]);
     }

     protected void onPostExecute(Long result) {
         showDialog("Downloaded " + result + " bytes");
     }
 }

Check this link for more information

这篇关于progressDialog在AsyncTask的停止旋转的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆