首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在AsyncTask中显示Proressbar?

如何在AsyncTask中显示Proressbar?
EN

Stack Overflow用户
提问于 2018-08-01 23:57:31
回答 2查看 0关注 0票数 0

我是Android初学者。我正在努力将我的PDF文件从Firebase加载到PDFView中,我设法实现了它。但现在的问题是,当从防火墙加载PDF文件时,屏幕一开始是白色的,我想这会让用户认为它不会加载应用程序。我想要一个Progressbar显示文件正在加载,如果没有网连接,则一个简单的对话框应该显示。谢谢。

代码语言:txt
复制
 new RetrievePDFStream().execute("My PDF link here",null,null);

 public class RetrievePDFStream extends AsyncTask<String,Void,InputStream>{

    @Override
    protected InputStream doInBackground(String... strings) {
        InputStream inputStream = null;
        try
        {
            URL url = new URL(strings[0]);
            HttpURLConnection urlConnection = (HttpURLConnection)url.openConnection();
            if (urlConnection.getResponseCode() == 200)
            {
                inputStream = new BufferedInputStream(urlConnection.getInputStream());

            }
        }

        catch (IOException e)
        {
            return null;

        }

        return  inputStream;
    }

    class MyTask extends AsyncTask<Integer, Integer, String> {
        @Override
        protected String doInBackground(Integer... params) {
            for (; count <= params[0]; count++) {
                try {
                    Thread.sleep(1000);
                    publishProgress(count);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            return "Task Completed.";
        }
    }

    @Override
    protected void onPostExecute(InputStream inputStream) {
        progressBar.setVisibility(View.GONE);
        pdfView.fromStream(inputStream).load();
    }
}
EN

回答 2

Stack Overflow用户

发布于 2018-08-02 08:15:24

通过你发布的代码,我看到你已经知道如何覆盖doInBackgroundonPostExecute

还有3种其他方法可以重写:onPreExecuteonCancelledonProgressUpdate

这是文档的链接:https://developer.android.com/reference/android/os/AsyncTask

票数 0
EN

Stack Overflow用户

发布于 2018-08-02 09:56:16

代码语言:txt
复制
 public class RetrievePDFStream extends AsyncTask<String,Integer,String>{

 public interface MyCallback{
     void showProgress();
     void hideProgress();
     void updateProgress(int progress);
     void loadFromStream(InputStream in);
     void loadFromString(String text);
 }    

private MyCallback callback;

public RetrievePDFStream(MyCallback callback){
  this.callback = callback;
}
        /**
         * Runs on the UI thread before {@link #doInBackground}.
         */
        @Override
        protected void onPreExecute() {
          callback.showProgress();
        }

        @Override
        protected String doInBackground(String... strings) {
            // TODO implement you Stream logic here
            // Try to read from InputStream on background and return String to onPostExecute method
            BufferedReader r = new BufferedReader(new 
            InputStreamReader(inputStream));
            StringBuilder total = new StringBuilder();
            String line;
            while ((line = r.readLine()) != null) {
            total.append(line).append('\n');
            }
            return total;
        }

        /**
         * Runs on the UI thread after {@link #publishProgress} is invoked.
         * The specified values are the values passed to {@link #publishProgress}.
         *
         * @param values The values indicating progress.
         */
        @Override
        protected void onProgressUpdate(Integer... values) {
            super.onProgressUpdate(values);
            callback.updateProgress(values[0]);
        }

        // Runs on the UI thread after {@link #doInBackground}.
        @Override
        protected void onPostExecute(String myString) {
            callback.hideProgress();
            // callback.loadFromStream(inputStream);
            callback.loadFromString(myString);
            // pdfView.fromStream(inputStream).load();
        }
    }

MyActivity

代码语言:txt
复制
public class MyActivity extends Activity implements MyCallback{

  // ....
  // Other Activity stuff


     @Override
     public void showProgress(){
        progressBar.setVisibility(View.VISIBLE);
     }

     @Override
     public void hideProgress(){
        progressBar.setVisibility(View.GONE);
     }

     @Override
     public void updateProgress(int progress){
       // Do Stuff
     }

     @Override
     public void loadFromStream(InputStream in){
       // Do Stuff
     }

     @Override
     public void loadFromString(String text){
       // Do Stuff
     }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100001848

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档