您的位置:首页 > 移动开发 > Android开发

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上完美解决.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: