Android开发遇到java.lang.NoClassDefFoundError如何定位和解决
Android开发遇到java.lang.NoClassDefFoundError如何定位和解决
在Android 开发的过程中,遇到了java.lang.NoClassDefFoundError 的异常。下面我分享一下使用Android Studio 的断点调试的功能帮助定位和分析问题。下面是定位和解决该问题的步骤:
1,Attach Debugger to Android Process ;
按照下面的图示把Debugger 依附到指定的进程上:
2,在导致崩溃的地方打上断点;
3,使用Android Studio的Evaluation Expression 的功能找到导致异常的原因。
使用单步调试就可以知道该异常是java.lang.NoClassDefException.
紧接着使用Android Studio 的Evalution Expression的功能帮助定位到导致该异常的原因。我们展开了cause 那一栏,就发现了:exception={[email protected]}“java.lang.RuntimeException:can’t create handler inside thread that has not called Looper.”
该问题在Stack overflow 中有详细的解决的办法。下面是解决该问题的链接和部分的截图:
部分截图:
对上面的截图我稍作翻译:
不要在Android UI线程之外使用Android 的UI工具包就可以修复这个问题。Android提供了在其他的线程之外访问UI线程的方法。下面是可以帮到你的几个方法的列表。
PS: You’re calling it from a worker thread. You need to call Toast.makeText() (and most other functions dealing with the UI) from within the main thread. You could use a handler, for example.
Android 的线程分为Main Thread (也叫UI Thread)、Work Thread.
你在工作线程中调用了它,你需要在Main thread 中调用,如果想要在工作线程中调用就必须使用Handler.
俗话说工欲善其事,必先利其器。使用Google 搜索比百度的搜索引擎的效率要高很多。希望大家多多利用谷歌,提高自己解决问题的能力。