Java 如果显示键盘,android应用程序将崩溃
我有一个活动,我强迫键盘显示Java 如果显示键盘,android应用程序将崩溃,java,android,Java,Android,我有一个活动,我强迫键盘显示 InputMethodManager inputMethodManager=(InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); inputMethodManager.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0); 键盘正确显示,必要时也会被遮挡。问题是当我完成活动时,应用程序崩溃。 如果该活动从未显示键盘或在未开始编辑文本的情
InputMethodManager inputMethodManager=(InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
inputMethodManager.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
键盘正确显示,必要时也会被遮挡。问题是当我完成活动时,应用程序崩溃。
如果该活动从未显示键盘或在未开始编辑文本的情况下显示键盘,则该活动完成时不会出现任何错误,但如果您只写一个或多个字符,则应用程序将崩溃。如何解决?多谢各位
用于完成活动的方法
boto_back.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View arg0)
{
InputMethodManager inputMethodManager=(InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
inputMethodManager.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY, 0);
finish();
}
});
@Override
public void onDestroy()
{
if (adMob != null)
{
// Destroy the AdView.
adMob.destroy();
}
super.onDestroy();
}
logcat
07-07 19:04:25.191: E/AndroidRuntime(8443): FATAL EXCEPTION: main
07-07 19:04:25.191: E/AndroidRuntime(8443): java.lang.RuntimeException: Unable to destroy activity {com.xxxx.xxxx/com.xxxx.projecte1.TabBar_iOSActivity}: java.lang.RuntimeException: Unable to destroy activity {com.xxxx.xxxx/com.xxxx.projecte1.webPush}: java.lang.NullPointerException
07-07 19:04:25.191: E/AndroidRuntime(8443): at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:2693)
07-07 19:04:25.191: E/AndroidRuntime(8443): at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:2711)
07-07 19:04:25.191: E/AndroidRuntime(8443): at android.app.ActivityThread.access$2100(ActivityThread.java:121)
07-07 19:04:25.191: E/AndroidRuntime(8443): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:976)
07-07 19:04:25.191: E/AndroidRuntime(8443): at android.os.Handler.dispatchMessage(Handler.java:99)
07-07 19:04:25.191: E/AndroidRuntime(8443): at android.os.Looper.loop(Looper.java:130)
07-07 19:04:25.191: E/AndroidRuntime(8443): at android.app.ActivityThread.main(ActivityThread.java:3701)
07-07 19:04:25.191: E/AndroidRuntime(8443): at java.lang.reflect.Method.invokeNative(Native Method)
07-07 19:04:25.191: E/AndroidRuntime(8443): at java.lang.reflect.Method.invoke(Method.java:507)
07-07 19:04:25.191: E/AndroidRuntime(8443): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)
07-07 19:04:25.191: E/AndroidRuntime(8443): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:624)
07-07 19:04:25.191: E/AndroidRuntime(8443): at dalvik.system.NativeStart.main(Native Method)
07-07 19:04:25.191: E/AndroidRuntime(8443): Caused by: java.lang.RuntimeException: Unable to destroy activity {com.xxxx.xxxx/com.xxxx.projecte1.webPush}: java.lang.NullPointerException
07-07 19:04:25.191: E/AndroidRuntime(8443): at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:2693)
07-07 19:04:25.191: E/AndroidRuntime(8443): at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:2603)
07-07 19:04:25.191: E/AndroidRuntime(8443): at android.app.LocalActivityManager.dispatchDestroy(LocalActivityManager.java:622)
07-07 19:04:25.191: E/AndroidRuntime(8443): at android.app.ActivityGroup.onDestroy(ActivityGroup.java:85)
07-07 19:04:25.191: E/AndroidRuntime(8443): at com.xxxx.projecte1.TabBar_iOSActivity.onDestroy(TabBar_iOSActivity.java:417)
07-07 19:04:25.191: E/AndroidRuntime(8443): at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:2680)
07-07 19:04:25.191: E/AndroidRuntime(8443): ... 11 more
这是你唯一的活动吗
如果是……尝试移除饰面()这是你唯一的活动吗
如果是……尝试移除饰面()为什么不试试这种方法: 用于显示键盘:
InputMethodManager mgr = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
mgr.showSoftInput(inputEditText, InputMethodManager.SHOW_FORCED);
InputMethodManager mgr = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
mgr.hideSoftInputFromWindow(inputEditText.getWindowToken(), 0);
用于隐藏:
InputMethodManager mgr = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
mgr.showSoftInput(inputEditText, InputMethodManager.SHOW_FORCED);
InputMethodManager mgr = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
mgr.hideSoftInputFromWindow(inputEditText.getWindowToken(), 0);
你为什么不试着这样做: 用于显示键盘:
InputMethodManager mgr = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
mgr.showSoftInput(inputEditText, InputMethodManager.SHOW_FORCED);
InputMethodManager mgr = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
mgr.hideSoftInputFromWindow(inputEditText.getWindowToken(), 0);
用于隐藏:
InputMethodManager mgr = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
mgr.showSoftInput(inputEditText, InputMethodManager.SHOW_FORCED);
InputMethodManager mgr = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
mgr.hideSoftInputFromWindow(inputEditText.getWindowToken(), 0);
我想你把旗子倒过来了: 在Android中,
toggleSoftInput
功能具有以下参数:
public void toggleSoftInput (int showFlags, int hideFlags)
在使用过程中,您使用hideFlags代替showFlags:
inputMethodManager.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY, 0);
尝试按如下方式交换它们:
inputMethodManager.toggleSoftInput(0, InputMethodManager.HIDE_IMPLICIT_ONLY);
我想你把旗子倒过来了: 在Android中,
toggleSoftInput
功能具有以下参数:
public void toggleSoftInput (int showFlags, int hideFlags)
在使用过程中,您使用hideFlags代替showFlags:
inputMethodManager.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY, 0);
尝试按如下方式交换它们:
inputMethodManager.toggleSoftInput(0, InputMethodManager.HIDE_IMPLICIT_ONLY);
作为最后一种手段,您始终可以使用try-catch块捕获异常,如下所示:
@Override
public void onDestroy()
{
try {
if (adMob != null)
{
// Destroy the AdView.
adMob.destroy();
}
} catch (NullPointerException e) {
e.printStackTrace(); //Or don't print it if you dont want.
}
super.onDestroy();
}
虽然这不是最好的方法(也许是最不可取的),但它可以完成工作。由于您正在退出活动,我不认为这会把事情搞砸。作为最后一种手段,您可以使用如下try-catch块捕获异常:
@Override
public void onDestroy()
{
try {
if (adMob != null)
{
// Destroy the AdView.
adMob.destroy();
}
} catch (NullPointerException e) {
e.printStackTrace(); //Or don't print it if you dont want.
}
super.onDestroy();
}
虽然这不是最好的方法(也许是最不可取的),但它可以完成工作。由于您正在退出活动,我不认为这会把事情搞砸。观察LogCat中的异常可能会让您更接近答案。请粘贴代码和日志,以便在崩溃时做出准确的决定,希望能有所帮助!你能发布你的onDestroy方法吗?问题在文件TabBar_iOSActivity.java第417行。某些对象等于null,因此观察LogCat中的异常可能会使您更接近答案。请粘贴您的代码和日志,以便在崩溃时做出准确的决定,希望能有所帮助!你能发布你的onDestroy方法吗?问题在文件TabBar_iOSActivity.java第417行。某些对象等于null,但已支持此部分。问题是,当我完成活动并显示keybord时,应用程序crashes@Jaume,我在某个地方读到切换SoftInput会导致一些问题。所以我想你应该试试看。@Jaume你能不能把你的项目发到某个地方,我无法重现这个问题。我真的很想解决这个问题,谢谢,但这部分已经得到了支持。问题是,当我完成活动并显示keybord时,应用程序crashes@Jaume,我在某个地方读到切换SoftInput会导致一些问题。所以我想你应该试试看。@Jaume你能不能把你的项目发到某个地方,我无法重现这个问题。我真的很想解决这个问题