赞
踩
因为项目中有阅读pdf的功能。。所以就在网上找了个控件。可以阅读远程和本地的pdf文件的。控件的名字是:
com.lidong.pdf.PDFView
这个控件用了很久都没有问题。。用的也很顺手。阅读服务器上的pdf文件的原理其实也是下载到本地。然后再从本地解析。这里会有个坑。就是下载本地的时候文件名。一定要唯一。因为这个控件下载服务器上的pdf会先去本地查找是不是有该名称的pdf文件。如果有。就不下载了,我之前没有注意。用的是类的id作为文件名,可是后来,这个类没有变。但是里面的文件变了。这就导致客户在app上看到的还是缓存的pdf文件。解决办法就是一定要唯一。且每次修改pdf文件的时候,这个名字要变。我用的时候修改时间作为pdf文件名。好几个项目都是这个控件,没有问题。
但是在最近的一个项目,我用该控件的时候。报错了。报错信息如下:
java.lang.RuntimeException: An error occured while executing doInBackground() at android.os.AsyncTask$3.done(AsyncTask.java:300) at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355) at java.util.concurrent.FutureTask.setException(FutureTask.java:222) at java.util.concurrent.FutureTask.run(FutureTask.java:242) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) at java.lang.Thread.run(Thread.java:841) Caused by: java.lang.RuntimeException: error loading page at org.vudroid.pdfdroid.codec.PdfPage.open(Native Method) at org.vudroid.pdfdroid.codec.PdfPage.createPage(PdfPage.java:55) at org.vudroid.pdfdroid.codec.PdfDocument.getPage(PdfDocument.java:18) at org.vudroid.core.DecodeServiceBase.getPage(DecodeServiceBase.java:175) at com.lidong.pdf.RenderingAsyncTask.proceed(RenderingAsyncTask.java:101) at com.lidong.pdf.RenderingAsyncTask.doInBackground(RenderingAsyncTask.java:64) at com.lidong.pdf.RenderingAsyncTask.doInBackground(RenderingAsyncTask.java:34) at android.os.AsyncTask$2.call(AsyncTask.java:288) at java.util.concurrent.FutureTask.run(FutureTask.java:237) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) at java.lang.Thread.run(Thread.java:841)
仔细看下。原因是打开pdf的时候报错了。看下本地可以看到。文件其实已经下载下来了。就是解析的时候报错了。
在网上仔细找了下。原因应该是pdf版本不同。导致解析错误。解决办法:如果方便的话。把原pdf用新的word打开重新保存下。或者直接新建一个新的pdf文档。然后把原来的内容复制下来。保存。重新上传。这样再打开就没有问题了。
如果不方便的话。只能换控件了。pdf阅读器:
https://github.com/barteksc/AndroidPdfViewer。GitHub上这个控件的星星还挺多。用起来还可以。不过要自己写下载的方法,网上找一个下载文件的工具类。然后下载好。用该控件打开就可以了。
。嗯。还有个问题是我最近才注意到的。原来调用了activity的finish方法并不会立即销毁此activity。即不会立即调用activity的ondestory。activity的生命周期还是正常走。所以。如果想在oncreate里面就结束该activity。最好用finish+return。阻止activity的生命周期继续往下走。
每日语录:
单曲循环《阿刁》。
嗯。加油!!!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。