注意:我试图解决的问题仅限于基于Rockchip RK312X的无名中国平板电脑运行SDK 23(Marshmallow)。没有其他设备似乎受到影响,但不幸的是我被迫使用那些糟糕的设备(它们也有btw上的串口)用于dev&演示目的。
问题:当从窗口中移除包含EditText
的任何子类的任何布局时(在活动中调用finish()
),包含自定义DialogFragment
一个 EditText 被解雇等。)应用程序崩溃,提供以下堆栈跟踪(完整输出):
java.lang.NullPointerException: Attempt to invoke interface method 'boolean android.view.inputmethod.InputConnection.reportFullscreenMode(boolean)' on a null object reference
at android.view.inputmethod.InputConnectionWrapper.reportFullscreenMode(InputConnectionWrapper.java:122)
at com.android.internal.view.IInputConnectionWrapper.executeMessage(IInputConnectionWrapper.java:416)
at com.android.internal.view.IInputConnectionWrapper$MyHandler.handleMessage(IInputConnectionWrapper.java:78)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:746)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:636)
这是一个非常简单的布局示例:
<android.support.design.widget.TextInputLayout
android:id="@+id/tilConnectionToken"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/tvSetupInfo"
android:layout_marginEnd="15dp"
android:layout_marginStart="15dp"
android:layout_marginTop="10dp"
android:ems="10"
app:errorEnabled="true"
android:hint="@string/conn_token">
<android.support.design.widget.TextInputEditText
android:id="@+id/etConnectionToken"
android:maxLines="1"
android:inputType="text"
android:imeOptions="actionDone"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</android.support.design.widget.TextInputLayout>
Activity
并没有做任何事情:
class ConnectWizardActivity : AppCompatActivity(), View.OnClickListener {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_setup_wiz)
btnCancel.setOnClickListener(this)
}
override fun onClick(v: View) {
when (v.id) {
R.id.btnCancel -> finish()
}
}
}
调用finish()
已导致上面提供的堆栈跟踪崩溃。在完成活动之前我曾尝试过:
EditText
EditText
(及其他Views
)
同样的NPE不断发生。正如我之前所说,问题不仅限于特定的Activity或EditText的特定子类 - 它发生在这些设备的任何地方。
我认为通常会发生这种情况:例如,此日志来自华为MediaPad T3,没有崩溃
W/IInputConnectionWrapper: finishComposingText on inactive InputConnection
如何在无名的Marshmallow设备上解决NPE问题?