java - expected - Fatal crash: la búsqueda de enfoque devolvió una vista que no pudo enfocar
java.lang.illegalstateexception expected begin_object but was string at line 1 column 1 path $ (6)
Mi aplicación sigue fallando cuando escribo algo en un EditText, pero esto no sucede siempre solo en algunos casos. Estoy ejecutando mi aplicación en un Samsung Galaxy Tab 2 10.1 WiFi y 3G (GT-P5100) con Android 4.0.4 (ICS). Yo uso el teclado de valores.
Este es mi logcat:
11-28 21:43:01.007: E/AndroidRuntime(15540): java.lang.IllegalStateException: focus search returned a view that wasn''t able to take focus!
11-28 21:43:01.007: E/AndroidRuntime(15540): at android.widget.TextView.onKeyUp(TextView.java:5833)
11-28 21:43:01.007: E/AndroidRuntime(15540): at android.view.KeyEvent.dispatch(KeyEvent.java:2659)
11-28 21:43:01.007: E/AndroidRuntime(15540): at android.view.View.dispatchKeyEvent(View.java:5547)
11-28 21:43:01.007: E/AndroidRuntime(15540): at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1246)
11-28 21:43:01.007: E/AndroidRuntime(15540): at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1246)
11-28 21:43:01.007: E/AndroidRuntime(15540): at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1246)
11-28 21:43:01.007: E/AndroidRuntime(15540): at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1246)
11-28 21:43:01.007: E/AndroidRuntime(15540): at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1246)
11-28 21:43:01.007: E/AndroidRuntime(15540): at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1246)
11-28 21:43:01.007: E/AndroidRuntime(15540): at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchKeyEvent(PhoneWindow.java:2027)
11-28 21:43:01.007: E/AndroidRuntime(15540): at com.android.internal.policy.impl.PhoneWindow.superDispatchKeyEvent(PhoneWindow.java:1388)
11-28 21:43:01.007: E/AndroidRuntime(15540): at android.app.Activity.dispatchKeyEvent(Activity.java:2324)
11-28 21:43:01.007: E/AndroidRuntime(15540): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1954)
11-28 21:43:01.007: E/AndroidRuntime(15540): at android.view.ViewRootImpl.deliverKeyEventPostIme(ViewRootImpl.java:3360)
11-28 21:43:01.007: E/AndroidRuntime(15540): at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2618)
11-28 21:43:01.007: E/AndroidRuntime(15540): at android.os.Handler.dispatchMessage(Handler.java:99)
11-28 21:43:01.007: E/AndroidRuntime(15540): at android.os.Looper.loop(Looper.java:137)
11-28 21:43:01.007: E/AndroidRuntime(15540): at android.app.ActivityThread.main(ActivityThread.java:4514)
11-28 21:43:01.007: E/AndroidRuntime(15540): at java.lang.reflect.Method.invokeNative(Native Method)
11-28 21:43:01.007: E/AndroidRuntime(15540): at java.lang.reflect.Method.invoke(Method.java:511)
11-28 21:43:01.007: E/AndroidRuntime(15540): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790)
11-28 21:43:01.007: E/AndroidRuntime(15540): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
11-28 21:43:01.007: E/AndroidRuntime(15540): at dalvik.system.NativeStart.main(Native Method)
Este es mi uno de mis EditTexts:
<EditText
android:id="@+id/input_ftu_position_other"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="64dp"
android:ems="20"
android:inputType="text" />
Creo que esto puede ser un error de dispositivo, por ejemplo:
Este error se produce cuando ImeOptions se establece en EditorInfo.IME_ACTION_NEXT
o EditorInfo.IME_ACTION_PREVIOUS
. Mientras que el elemento principal de esa vista no es enfocable, o el siguiente objeto de enfoque encontrado no es enfocable.
Llama para encontrar el siguiente elemento de enfoque al que se debe saltar rápidamente, pero esto no existe o no se puede enfocar, genera este error. Ocurrirá si el siguiente está oculto y, por lo tanto, no se puede enfocar o el padre no puede realmente lidiar con la llamada a findFocus () y devuelve el valor nulo.
La solución por lo tanto es bastante fácil. No lo configure en IME_ACTION como siguiente en este caso. Si no puede saltar rápidamente de un campo de texto a otro, entonces haga eso posible o cambie la acción a HECHO.
edittext.setImeOptions(EditorInfo.IME_ACTION_DONE);
Note el comentario en el código antes del bit ofensivo:
Este es el manejo de alguna acción por defecto. Tenga en cuenta que, para la compatibilidad con versiones anteriores, no hacemos este manejo predeterminado si no se han dado opciones explícitas de ime, en lugar de eso, se convierten en los códigos de tecla de ingreso normales que una aplicación puede estar esperando.
No hará esto si establece el tipo de texto de edición o si proporciona un IME explícito que no es funcionalmente incorrecto. O bien, tenga un objeto principal que se pueda enfocar en la siguiente o cualquier otra cosa. Es solo un código heredado en un bit de reserva que a veces puede no tener la acción dada como sea posible.
Ninguna de las respuestas anteriores funcionó para mí. Estaba teniendo editText en recyclerview y el siguiente editText no podía recibir el foco cuando no estaba a la vista.
Verifiqué la causa del problema y fue esto en la clase TextView:
// This is the handling for some default action.
// Note that for backwards compatibility we don''t do this
// default handling if explicit ime options have not been given,
// instead turning this into the normal enter key codes that an
// app may be expecting.
if (actionCode == EditorInfo.IME_ACTION_NEXT) {
View v = focusSearch(FOCUS_FORWARD);
if (v != null) {
if (!v.requestFocus(FOCUS_FORWARD)) {
throw new IllegalStateException("focus search returned a view "
+ "that wasn''t able to take focus!");
}
}
return;
}
Actualicé mi editText para escuchar cualquier acción del editor e hice esto:
companyNameET.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_NEXT) {
View v1 = v.focusSearch(FOCUS_FORWARD);
if (v1 != null) {
if (!v.requestFocus(FOCUS_FORWARD)) {
return true;
}
}
return false;
} else return false;
}
});
Tengo otra solución, rastrear los códigos fuente de TextView y coincidir con el registro de errores que proporcionó
TextView.java:
if (!hasOnClickListeners()) {
View v = focusSearch(FOCUS_DOWN);
if (v != null) {
if (!v.requestFocus(FOCUS_DOWN)) {
throw new IllegalStateException(
"focus search returned a view " +
"that wasn''t able to take focus!");
}
}
}
Como resultado, creo que podría darle a View.OnClickListener para evitar que se produjera el error.
ej: textView.setOnClickListener (nuevo OnClickListener);
Tuve este mismo choque y, aunque no parezca la situación exacta, quizás esto sea útil:
Tenía dos cuadros EditText. El de abajo fue el Next Focus Down del de arriba. En algunas situaciones, ocultaba el cuadro inferior, de modo que cuando presiono el botón siguiente del teclado superior, intentaría ir al fondo, pero se bloquearía porque estaba oculto. Arreglé esto configurando el cuadro inferior (el objetivo de otro foco de enfoque hacia abajo de otro texto de edición) como no se puede enfocar:
EditText inputBox = (EditText)findViewById(R.id.Bottom_Box);
inputBox.setFocusable(false);
Espero que esto ayude.
Tuve este problema y lo arreglé así:
public void setEditable(boolean flag) {
mEditText.setFocusableInTouchMode(flag);
mEditText.setFocusable(flag);
mEditText.setClickable(flag);
}