Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Android AsyncTask onPostExecute方法大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
编辑:如果我根本不使用进度,只显示对话框,那么一切正常,没有任何问题.但是如果我添加进度,则对话框不会关闭(方法onPostExecute()不会被触发).

onPostExecute方法未执行.我哪里弄错了? (仿真器和设备上的结果相同)
我也不确定是否应该对这些方法使用覆盖表示法

这是目前的粗略解决方案.它每次都有效,但不是正确而不是好的.
我在做什么:
*我使用tabgroupactivity启动子活动
*然后我导航到子活动中的另一个活动,因此它是父项的当前子项
*有一个webview,我在其中显示有关一条评论的信息……无论如何
* webView显示内容中有一个链接
*当我点击它时,我开始下载PDF文件.

下载文件时:

while ((current = bis.read()) != -1) {
        read = read + current;
        baf.append((bytE) current);
        Dialog.setProgress(read);

        if(Dialog.isShowing() && read+2*current>file_sizE){
            Dialog.dismiss();
            Dialog.cancel();
        }
    }

我的Dialog对象消失了,所以如果我尝试在While循环后调用Dialog,我就是不明白.所以我做的是每次我从网站获得新的缓冲区时,我检查对话框是否仍然可见,如果当前字节连同当前读取的字节数大于文件的完整大小,那么我关闭while循环中的对话框.
我尝试使用fileSize == read(字节数),但它不起作用,也许它们在下载文件时并不是彼此精确匹配的

private class DownloadPDFFile extends AsyncTask<String,Integer,Void> {
    private ProgressDialog Dialog = new ProgressDialog(getParent());

    protected void onPreExecute() {
        Dialog.setmessage("Downloading PDF file..");
        Dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
        Dialog.setCancelable(false);
        // Dialog.setMax(1000);
        Dialog.setProgress(0);
        Dialog.show();
    }

    protected Void doInBACkground(String... urls) {
        File file=null;
        int file_size = 0;
        try {
            URL url = new URL(urls[0]);
            URLConnection urlConnection = url.openConnection();
            urlConnection.connect();
            file_size = urlConnection.getContentLength();
            Dialog.setMax(file_sizE);
        } catch (IOException E) {

        }

        try {
            URL url1 = new URL(urls[0]); // you can // link

            file = new File("skm_intern_pdf.pdf");

            URLConnection ucon = url1.openConnection();

            InputStream is = ucon.geTinputStream();

            BufferedInputStream bis = new BufferedInputStream(is);

            ByteArrayBuffer baf = new ByteArrayBuffer(5000);
            int read = 0;
            int current = 0;
            while ((current = bis.read()) != -1) {
                read = read + current;
                baf.append((bytE) current);
                Dialog.setProgress(read);

                if(Dialog.isShowing() && read+2*current>file_sizE){
                    Dialog.dismiss();
                    Dialog.cancel();
                }
            }

            FiLeoutputStream fos = openFiLeoutput("skm_pdf.pdf",Context.MODE_WORLD_WRITEABLE);
            fos.write(baf.toByteArray());
            fos.flush();
            fos.close();

        } catch (IOException E) {

        }

        return null;
        }

解决方法

在AsyncTask完成之前,是否取消/暂停/销毁了AsyncTask的父级?

如果是,AsyncTask可能会收到cancel(),导致onPostExecute()永远不会运行.要验证这一点,请尝试重写onCancelled() – 方法检查它是否已运行.

大佬总结

以上是大佬教程为你收集整理的Android AsyncTask onPostExecute方法全部内容,希望文章能够帮你解决Android AsyncTask onPostExecute方法所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。