问题 三星Galaxy Android 7上的建议弹出窗口中出现空指针异常


我看到我的应用程序中经常发生异常崩溃,但仅在运行Android 7的三星Galaxy设备上发生。由于我的应用程序代码没有在堆栈跟踪中显示,我发现很难找到缺少外出和购买这些昂贵的设备之一。这里有线索吗?

它似乎是与输入控件关联的建议弹出窗口内发生的内部错误,可能是 EditText 我的应用程序主屏幕上的功能。那 EditText 不应该提出建议,因为我也在使用

searchBox.setImeOptions(EditorInfo.IME_ACTION_SEARCH | EditorInfo.IME_FLAG_NO_EXTRACT_UI);
        searchBox.setInputType(EditorInfo.TYPE_CLASS_TEXT | EditorInfo.TYPE_TEXT_FLAG_NO_SUGGESTIONS);

堆栈跟踪如下:

java.lang.NullPointerException: 
    at android.widget.Editor$SuggestionsPopupWindow.initContentView(Editor.java:3729)
    at android.widget.Editor$PinnedPopupWindow.<init>(Editor.java:3390)
    at android.widget.Editor$SuggestionsPopupWindow.<init>(Editor.java:3675)
    at android.widget.Editor.replace(Editor.java:431)
    at android.widget.Editor$3.run(Editor.java:2354)
    at android.os.Handler.handleCallback(Handler.java:751)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:154)
    at android.app.ActivityThread.main(ActivityThread.java:6776)
    at java.lang.reflect.Method.invoke(Native Method:0)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1520)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1410)

3208
2018-06-26 20:22


起源

空指针异常有时是因为您删除了连接到Java文件的视图(findViewById),但是您忘记删除Java文件中的那行代码。 - Infinite Loops
一样的问题。数以百计的报道。三星在Android制作的bug扩展方面总是非常出色。 - Quark
你有解决方案(删除TYPE_TEXT_FLAG_NO_SUGGESTIONS除外)吗? - Jolinar
@Tron你也用 TYPE_TEXT_FLAG_NO_SUGGESTIONS? - Craig McMahon
是的,我在布局中有两个EditTexts,其中一个有 TYPE_TEXT_VARIATION_VISIBLE_PASSWORD 和 TYPE_TEXT_FLAG_NO_SUGGESTIONS 标志。我无法测试确切的行为(只有stacktraces和用户的评论')。 - Quark


答案:


这似乎是三星设备中的一个错误。 看这里: http://developer.samsung.com/forum/thread/android-app-crash-because-of-null-pointer-exception-on-setting-onclick-listener-in-editor-class/201/309993?boardName= SDK&startId = ZZZZZ〜


11
2017-07-04 13:23





如果您的观点正在扩展 活动 尝试扩展 AppCompatActivty 相反,希望它能解决你的问题。


0
2017-11-01 08:25



我不知道为什么这会有所帮助,但遗憾的是与遗留代码无关。 - David Wasser


这可能是三星Android系统中的一个错误。 对于这种平台的错误,我相信,我想使用try {} catch {}来处理它们,然后应用程序应该能够至少维持。 当然,如果在应用程序启动序列期间发生异常,那么使用try {} catch ...来处理它是不可能的,最好找到根本原因并找到一个真正的解决方案来修复或解决它。但是,如果您的应用程序功能中发生异常,则在捕获此异常后很容易找到处理它的方法,那么您的应用程序将不会崩溃。 我喜欢使用“try ... catch”来处理这种意外情况。


-1
2017-07-07 09:13



可能没办法,你怎么能抓住这个。 - Quark
用于 try/catch 这里没用。崩溃完全发生在OP的代码之外。崩溃发生在三星代码中,直接从Android代码调用。 - David Wasser