Android: los tramos SPAN_EXCLUSIVE_EXCLUSIVE no pueden tener una longitud cero

190

Tengo el siguiente diseño (prácticamente vacío):

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/set_layout"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:contentDescription="content desc"
    android:orientation="vertical" >

    <TextView android:id="@+id/text"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:text="Hello, I am a TextView" />
</LinearLayout>

La clase de actividad contiene lo siguiente:

public class TestActivity extends Activity {
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_test);   
  }
}

Cuando ejecuto esto en mi dispositivo móvil, aparece el siguiente error:

SpannableStringBuilder
SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length

He intentado esto con y sin TextView y el error aún permanece, debo estar haciendo algo fundamentalmente incorrecto para que un diseño tan básico cause esto.

¿Alguien tiene alguna idea sobre cómo puedo hacer que esto se cargue sin el error?

DMac
fuente
Examine LogCat y observe el seguimiento de la pila asociado con su error. Si realmente es de esta aplicación, publique todo el seguimiento de la pila como una edición a su pregunta. Además, me gustaría deshacerme de android:contentDescriptionpartir LinearLayout, como el contenedor no es enfocable y por lo tanto la descripción no se utilizará yo sepa.
CommonsWare
66
Gracias por su respuesta. Desafortunadamente, no hay seguimiento de la pila para este error, el resultado es exactamente como lo he publicado anteriormente, pero el campo de aplicación en LogCat apunta a mi aplicación. He depurado el código y he cruzado cada línea sin que se produzca ningún error, por lo que debe estar en algún lugar del código de Android que espere algo que no está allí.
DMac
También me gustaría saber cómo evitar este molesto error, sin quitar / deshabilitar ninguna función para el usuario final.
desarrollador de Android el
1
Restablecí el teléfono a la configuración de fábrica y desapareció, después de probar la "reparación del teclado de Samsung", que no parecía ser el truco para mí ...
Shark
Tal vez no sea un problema en absoluto, pero después de actualizar a Android 4.1.1, veo muchos errores en los registros como este. Los tramos SPAN_EXCLUSIVE_EXCLUSIVE no pueden tener una longitud cero
Sagar Raiyani

Respuestas:

240

Me he encontrado con las mismas entradas de error en LogCat. En mi caso, es causado por el teclado de terceros que estoy usando. Cuando lo cambio de nuevo al teclado de Android, la entrada de error ya no aparece.

Jack
fuente
3
gracias @Rabi, incluso cambié a Swiftkey y comencé a obtener el error.
Maulik Sheth
2
Recibo el error al usar el teclado de Android en un Nexus 7 (edición de 2012, con 4.3)
Tom
(En Galaxy S4, 4.4.2) - Cambiar de nuevo al teclado Samsung original me solucionó esto. ¡Gracias!
FateNuller
66
Lamentablemente, el enlace de @Rabi anterior ya no es bueno. Pero gracias por esto. De hecho, estoy usando SwiftKey y parece que todavía está causando este problema 2 años después.
Splaktar
1
Este problema también aparece con Gboard (!) (Y es de Google)
Aenadon
113

Debido a que el error que se produce es no relacionada con una EditText, entonces es no relacionado con su teclado.

Los errores que está recibiendo no son el resultado de su código; Probablemente esté probando en un dispositivo Samsung que tenga TouchWiz de Samsung.

Tuve los mismos errores, luego probé en un Nexus S (también de Samsung, pero con un sistema operativo Android puro sin TouchWiz) y no obtuve este error.

Entonces, en su caso, ¡simplemente ignore estos errores mientras prueba en un dispositivo! :)

Karim
fuente
1
Es su teclado, probablemente el teclado de TouchWiz en su caso. Tengo los mismos errores en un Nexus 4 con Swiftkey, si elijo el teclado predeterminado de Android, los errores desaparecerán.
Dante
Los teclados definitivamente pueden conducir a este error, pero en el caso de que el teclado no se use o se llame, es decir, en el caso de que no haya EditText, no veo cómo el teclado puede ser la fuente del problema. Cuando cambio entre dos actividades diferentes, ambas sin EditText, sigo recibiendo el error cada vez que voy a una de estas actividades.
Karim
2
Estoy de acuerdo con Cookiki, los errores se deben a Samsung TouchWiz y no está causando ningún problema que no sea arrojar errores en logcat. Así será ignorarlos
user2566490
No podemos ignorar los errores porque solo ocurre en un TouchWiz, lo menos es informar a Samsung que hay un problema con el Touchwiz.
Sojurn
1
Sin duda, puedo ocurrir sin que esté relacionado con un EditText. Tuve este error al mostrar un PreferenceFragment con algunos encabezados, sin cuadros de texto ni nada por el estilo. En cada cambio de un PreferenceFragment recibí dos de estos mensajes de error. Cambió de "Samsung Keyboard" a "Smart Keyboard Pro" y los mensajes de error se detuvieron.
Magnus W
46

Mirando su código, no estoy seguro de por qué está recibiendo ese error, pero tuve el mismo error pero con los campos EditText.

Cambiar android:inputType="text"(o cualquiera de las otras variaciones de texto inputType) a android:inputType="textNoSuggestions"(o android:inputType="textEmailAddress|textNoSuggestions", por ejemplo) lo arregló para mí.

También puede configurar esto en Código con algo como

mInputField.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);

Parece que Android asume por defecto que los campos EditText tendrán sugerencias. Cuando no lo hacen, se equivoca. No estoy 100% seguro de esa explicación, pero los cambios mencionados anteriormente me lo arreglaron.

http://developer.android.com/reference/android/text/Spanned.html#SPAN_EXCLUSIVE_EXCLUSIVE

¡Espero que esto ayude!

tim
fuente
Gracias por esto. Pero incluso con el TextView eliminado y solo el diseño presente, obtengo el error. Es muy extraño.
DMac
¿Eliminar el contenido Descripción de LinearLayout no ayuda?
tim
2
No, desafortunadamente no. Aunque con más investigación, el error solo parece mostrarse en los dispositivos Samsung.
DMac
14

En su teléfono Android, vaya a:
configuración -> administrador de aplicaciones -> todos -> teclado samsung y luego haga clic en "borrar caché"
(elimine todos los datos recopilados por esta aplicación).

Celebra
fuente
Wow, tenía 68 MB de cosas almacenadas en caché por esa aplicación. : O
XåpplI'-I0llwlg'I -
11

Intenta usar el teclado predeterminado de Android, desaparecerá

Yasin Hassanien
fuente
Cómo usar el teclado predeterminado.
NagarjunaReddy
1
Tienes que cambiarlo en la configuración de entrada del teléfono. Si no lo cambió, debería tener el teclado predeterminado. Es una solución bastante divertida con ese teclado predeterminado, pero funciona para mí ...: p
Krystian
44
El teclado predeterminado de Android también tiene el problema (lo tengo en un Nexus 5)
Yoann Hercouet
4

Deje en claro que ha pasado un valor en su MainAcitivity para los siguientes métodos onCreateOptionsMenu y onCreate

En algunos casos, el desarrollador elimina la instrucción "return super.onCreateOptionsMenu (menu)" y cambia a "return true".

Masood Moshref
fuente
3

Esto funcionó para mí ... en cada dispositivo

    <EditText
        android:maxLines="1"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:textSize="15sp"
        android:layout_centerVertical="true"
        android:textColor="#000"
        android:id="@+id/input_search"
        android:background="@null"
        android:inputType="text"
        android:hint="Enter Address, City or Zip Code"
        android:imeOptions="actionSearch"
        />

En código Java:

mSearchText.setOnEditorActionListener(new TextView.OnEditorActionListener() {

        @Override
        public boolean onEditorAction(TextView textView, int actionId, KeyEvent keyEvent) {
            if(actionId == EditorInfo.IME_ACTION_SEARCH
                    || actionId == EditorInfo.IME_ACTION_DONE
                    || keyEvent.getAction() == KeyEvent.ACTION_DOWN
                    || keyEvent.getAction() == KeyEvent.KEYCODE_ENTER){

                //execute our method for searching
            }

            return false;
        }
    });
Rahul Nehul
fuente
Gracias. Trabajó como encanto
swapnil gandhi
parece tener un oyente es una necesidad
AndroidHV
Hola amigos, en mi pantalla no uso ningún texto de edición, solo uso el diseño lineal y el botón. Me enfrento al mismo problema cuando ejecuto la aplicación en la tableta (4.1.2).
Hardik
1

Tuve la misma advertencia y descubrí que al eliminar un @id no utilizado se eliminó la advertencia. Para mí era obvio ya que el @id estaba asociado con una creciente lista de TextViews vinculadas a una base de datos, por lo que había una advertencia para cada entrada.

conocido
fuente
1

Masood Moshref tiene razón, este error se produce porque el menú de opciones de Menú no está bien preparado al carecer de "return super.onCreateOptionsMenu (menu)" en el método onCreate ().

hqgoldswan
fuente
1

Para intentar depurar este error, primero vaya a su terminal / consola de Android y ejecute este comando:

ps | grep THE_ERROR_PID_YOU_GET_(IT_IS_A_NUMBER)

entonces, si el resultado sale como su aplicación ... es su aplicación la que causa el error. Intenta buscar el vacío Stringsque pasas al layout.

Tuve exactamente el mismo problema y fue mi culpa ya que estaba pasando un vacío Stringen mi diseño. Después de cambiar ""a " "este error desapareció.

Si no obtiene su aplicación desde la salida de la consola, entonces es algo más lo que la causa (probablemente, como otros dijeron, el teclado de Android)

dazito
fuente
0

Me he enfrentado al mismo problema. Casi perdí casi un par de semanas para resolver este problema. Finalmente tuve dudas sobre mí mismo e intenté crear otro proyecto copiando y pegando algunos archivos de inicio como SplashScreen & LoginScreen.

Pero con el mismo código todavía estaba obteniendo SPAN_EXCLUSIVE_EXCLUSIVE .

Luego, eliminé el código del controlador de la pantalla de bienvenida e intenté nuevamente y Wow está funcionando. No obtengo el problema SPAN_EXCLUSIVE_EXCLUSIVE en logcat .

Me pregunto, ¿por qué es? hasta el momento no obtuvo ninguna otra solución, pero al eliminar el controlador de la pantalla de inicio está funcionando.

Pruebe y actualice aquí si se resuelve o no.

Sachin Shelke
fuente
0

Verifique si tiene algún elemento como botón o vista de texto duplicado (copiado dos veces) en la pantalla donde esto se encuentra. Lo hice desapercibido y tuve que enfrentar el mismo problema.

Dibyendu Mitra Roy
fuente
0

También me encontré con este problema cuando copié parte del texto de Internet. Mi solución es recortar el texto / eliminar el formato antes de realizar cualquier procesamiento adicional.

codingpuss
fuente
0

Tuve el mismo problema pero con un listView ... lo resolví porque estaba usando un R.id.listView incorrecto, esa View List necesitaba tener un valor, en mi caso eran cadenas que guardé en listView2 ... entonces el código correcto era R.id.listView2

Andrey
fuente
0

Tuve el mismo problema y luego lo arreglé siguiendo el código.

  text = (EditText)findViewById(R.id.TextVoiceeditText); 
  text.setInputType(InputType.TYPE_CLASS_TEXT|InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);
Shahzad Afridi
fuente
0

Este error también se produce debido a un cambio de URL de API. intente presionar la URL que está utilizando en cartero yc si funciona correctamente. volver a verificar las API resolvió mi problema

Aditya Dabas
fuente
0

trate de evitar el uso de la vista en el diseño xml. Yo también tenía la misma sonda pero cuando eliminé la vista. Funcionó perfectamente.

como ejemplo:

             <EditText
                android:layout_width="match_parent"
                android:layout_height="wrap_content"                   
                android:hint="Username"
                android:inputType="number"                   
                android:textColor="#fff" />

            <view
                android:layout_width="match_parent"
                android:layout_height="1dp"
                android:background="#f9d7db" />

también verifique e intente cambiar por prueba y error android: inputType = "number" a android: inputType = "text" o mejor no usarlo si no es necesario. A veces el teclado se atasca y se produce un error en algunos de los dispositivos.

Eshan Chattaraj
fuente
0

En mi caso, los campos EditText con inputType como text / textCapCharacters estaban encerrando este error. Me di cuenta de esto en mi logcat cada vez que usé la tecla de retroceso para eliminar completamente el texto escrito en cualquiera de estos campos.

La solución que funcionó para mí fue cambiar el inputType de esos campos a textNoSuggestions ya que este era el tipo más adecuado y ya no me daba ningún error no deseado.

Ankush Chauhan
fuente