Android2.3下PopupWindows初始化时NullPointException导致程序崩溃的问题解决
2015-09-11 10:04
627 查看
如题,
Logcat信息如下:
09-11 09:55:10.839: E/AndroidRuntime(23541): FATAL EXCEPTION: main
09-11 09:55:10.839: E/AndroidRuntime(23541): java.lang.NullPointerException
09-11 09:55:10.839: E/AndroidRuntime(23541): at android.widget.PopupWindow.setContentView(PopupWindow.java:384)
09-11 09:55:10.839: E/AndroidRuntime(23541): at android.widget.PopupWindow.<init>(PopupWindow.java:286)
09-11 09:55:10.839: E/AndroidRuntime(23541): at android.widget.PopupWindow.<init>(PopupWindow.java:266)
09-11 09:55:10.839: E/AndroidRuntime(23541): at android.widget.PopupWindow.<init>(PopupWindow.java:223)
09-11 09:55:10.839: E/AndroidRuntime(23541): at com.hanvon.inputmethod.ui.ScanNoteDetailActivity$PopupWindows.<init>(ScanNoteDetailActivity.java:923)
09-11 09:55:10.839: E/AndroidRuntime(23541): at com.hanvon.inputmethod.ui.ScanNoteDetailActivity$5.onItemClick(ScanNoteDetailActivity.java:603)
09-11 09:55:10.839: E/AndroidRuntime(23541): at android.widget.AdapterView.performItemClick(AdapterView.java:284)
09-11 09:55:10.839: E/AndroidRuntime(23541): at android.widget.AbsListView$PerformClick.run(AbsListView.java:1998)
09-11 09:55:10.839: E/AndroidRuntime(23541): at android.os.Handler.handleCallback(Handler.java:587)
09-11 09:55:10.839: E/AndroidRuntime(23541): at android.os.Handler.dispatchMessage(Handler.java:92)
09-11 09:55:10.839: E/AndroidRuntime(23541): at android.os.Looper.loop(Looper.java:130)
09-11 09:55:10.839: E/AndroidRuntime(23541): at android.app.ActivityThread.main(ActivityThread.java:3687)
09-11 09:55:10.839: E/AndroidRuntime(23541): at java.lang.reflect.Method.invokeNative(Native Method)
09-11 09:55:10.839: E/AndroidRuntime(23541): at java.lang.reflect.Method.invoke(Method.java:507)
09-11 09:55:10.839: E/AndroidRuntime(23541): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:878)
09-11 09:55:10.839: E/AndroidRuntime(23541): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:636)
09-11 09:55:10.839: E/AndroidRuntime(23541): at dalvik.system.NativeStart.main(Native Method)
解决办法:
在重写PopupWindows的构造器中加上super(context);如下:public class PopupWindows extends PopupWindow {
public PopupWindows(Context mContext, View parent) {
super(mContext);//添加
View view = View.inflate(mContext, R.layout.item_popupwindow, null);
//省略其他代码
很不幸, 我如上添加了super(mContext);后在android4.0上运行又崩溃:NoClassDefFoundError log如下:
08-10 10:16:37.119: E/AndroidRuntime(6663): FATAL EXCEPTION: main
08-10 10:16:37.119: E/AndroidRuntime(6663): java.lang.NoClassDefFoundError: com.hanvon.inputmethod.ui.ScanNoteDetailActivity$PopupWindows
08-10 10:16:37.119: E/AndroidRuntime(6663): at com.hanvon.inputmethod.ui.ScanNoteDetailActivity$5.onItemClick(ScanNoteDetailActivity.java:603)
08-10 10:16:37.119: E/AndroidRuntime(6663): at android.widget.AdapterView.performItemClick(AdapterView.java:298)
08-10 10:16:37.119: E/AndroidRuntime(6663): at android.widget.AbsListView.performItemClick(AbsListView.java:1086)
08-10 10:16:37.119: E/AndroidRuntime(6663): at android.widget.AbsListView$PerformClick.run(AbsListView.java:2859)
08-10 10:16:37.119: E/AndroidRuntime(6663): at android.widget.AbsListView$1.run(AbsListView.java:3533)
08-10 10:16:37.119: E/AndroidRuntime(6663): at android.os.Handler.handleCallback(Handler.java:615)
08-10 10:16:37.119: E/AndroidRuntime(6663): at android.os.Handler.dispatchMessage(Handler.java:92)
08-10 10:16:37.119: E/AndroidRuntime(6663): at android.os.Looper.loop(Looper.java:137)
08-10 10:16:37.119: E/AndroidRuntime(6663): at android.app.ActivityThread.main(ActivityThread.java:4990)
08-10 10:16:37.119: E/AndroidRuntime(6663): at java.lang.reflect.Method.invokeNative(Native Method)
08-10 10:16:37.119: E/AndroidRuntime(6663): at java.lang.reflect.Method.invoke(Method.java:511)
08-10 10:16:37.119: E/AndroidRuntime(6663): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:807)
08-10 10:16:37.119: E/AndroidRuntime(6663): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:574)
08-10 10:16:37.119: E/AndroidRuntime(6663): at dalvik.system.NativeStart.main(Native Method)
于是我将super(mContext);改为了super(parent);问题解决.
public class PopupWindows extends PopupWindow {
public PopupWindows(Context mContext, View parent) {
super(parent);//修改
View view = View.inflate(mContext, R.layout.item_popupwindow, null);
//省略其他代码
因为时间原因, 未详细研究原因. 大神如果知道, 烦请留言.
至此,poputwindow导致的我的程序崩溃问题在android2.3和android4.0上完美解决.
相关文章推荐
- Android(java)学习笔记227:服务(service)之服务的生命周期(service)
- Android中View绘制优化之三---- 优化View
- android事件处理
- Android中View绘制优化二一---- 使用<include />标签复用布局文件
- Android中View绘制优化之一---- 优化布局层次
- Android实现计时与倒计时(限时抢购)的几种方法
- android自定义倒计时控件示例
- [Android] 任意时刻从子线程切换到主线程的实现
- [Android] 任意时刻从子线程切换到主线程的实现
- Android常用权限
- 浅谈:Android开发之intent
- Android 开发经验总结
- Android 访问C#.Net Webservice (简单例子适合初学者)
- Android 开发初步环境搭建
- 基于Android的数独游戏-----用Java语言编写
- Android 开发资源连接地址
- Android开源框架分类
- Android EditText的设置
- 实战脱坑,定制Android导航栏的那些坑
- android Studio优化