Android点击PDF导航按钮触发IllegalStateException异常求助
问题根源
崩溃是代码逻辑错误导致,和PDF文件本身无关:
你已经在MainActivity类中声明了全局成员变量PDFView pdfView,但在onCreate方法中又重复声明了同名的局部变量PDFView pdfView = findViewById(R.id.pdfView);,这就导致全局成员变量pdfView从未被初始化,一直为null。当你点击按钮触发nextPage/prevPage等方法时,调用空对象的方法就会触发空指针异常,最终抛出Could not execute method for android:onClick的错误。
修复方案
只需要修改onCreate方法里的初始化代码,不要重复声明局部变量,直接给全局成员变量赋值即可:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 去掉前面的PDFView类型声明,直接给全局pdfView赋值 pdfView = findViewById(R.id.pdfView); pdfView.fromAsset("Guide.pdf") .enableSwipe(true) .swipeHorizontal(false) .enableAnnotationRendering(true) .defaultPage(0) .spacing(10) .load(); }
额外优化建议
- 调用
jumpTo切换页码前建议先判断边界,避免跳转到小于0或者大于总页数的页码,防止出现异常:public void nextPage(View view) { int nextPage = pdfView.getCurrentPage() + 1; if (nextPage < pdfView.getPageCount()) { pdfView.jumpTo(nextPage,true); } } public void prevPage(View view) { int prevPage = pdfView.getCurrentPage() -1; if (prevPage >= 0) { pdfView.jumpTo(prevPage, true); } } - 缩放方法不需要额外调用
loadPages(),zoomTo方法本身就会触发页面重绘,多余调用反而可能导致性能问题。
内容的提问来源于stack exchange,提问作者Arge
相关产品推荐
相关产品推荐

