
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方法所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)