Android AsyncTask onPostExecute方法

Android AsyncTask onPostExecute方法,第1张

概述编辑:如果我根本不使用进度,只显示对话框,那么一切正常,没有任何问题.但是如果我添加进度,则对话框不会关闭(方法onPostExecute()不会被触发). onPostExecute方法未执行.我哪里弄错了? (仿真器和设备上的结果相同) 我也不确定是否应该对这些方法使用覆盖表示法 这是目前的粗略解决方案.它每次都有效,但不是正确而不是好的. 我在做什么: *我使用tabgroupactivit 编辑:如果我根本不使用进度,只显示对话框,那么一切正常,没有任何问题.但是如果我添加进度,则对话框不会关闭(方法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方法所遇到的程序开发问题。

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

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1126405.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-30
下一篇2022-05-30

发表评论

登录后才能评论

评论列表(0条)

    保存