Android 打开pdf时候报错:Caused by: java.lang.RuntimeException: error loading page


因为项目中有阅读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的生命周期继续往下走。

每日语录:

人到了某个年龄,是难免会被一些事情消耗和羁绊的。我们之所以要不停的学习和给自己打气,就是为了能够合理的摆脱这些消耗和羁绊。不然漫长的人生中,任何一点危机都有可能成为压死骆驼的那根稻草。所以,人啊,要么去争,要么认命。抱怨什么也改变不了,它只不过是情绪的发泄口罢了

单曲循环《阿刁》。

嗯。加油!!!




猜你喜欢

转载自blog.csdn.net/androidzmm/article/details/79524926