Android - Les intervalles SPAN_EXCLUSIVE_EXCLUSIVE ne peuvent pas avoir une longueur nulle


190

J'ai la disposition suivante (pratiquement vide):

<?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 classe Activity contient les éléments suivants:

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

Lorsque je l'exécute sur mon appareil mobile, j'obtiens l'erreur suivante:

SpannableStringBuilder
SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length

J'ai essayé cela avec et sans le TextView et l'erreur persiste, je dois faire quelque chose de fondamentalement faux pour qu'une telle disposition de base provoque cela.

Quelqu'un a-t-il des idées sur la façon dont je peux charger cela sans l'erreur?


Examinez LogCat et regardez la trace de pile associée à votre erreur. S'il s'agit bien de cette application, publiez l'intégralité de la trace de la pile en tant que modification de votre question. De plus, je supprimerais à android:contentDescriptionpartir LinearLayout, car ce conteneur n'est pas focalisable et donc la description ne sera pas utilisé à ma connaissance.
CommonsWare

6
Merci pour votre réponse. Malheureusement, il n'y a pas de trace de pile pour cette erreur, la sortie est exactement celle que j'ai publiée ci-dessus, mais le champ d'application dans LogCat pointe vers mon application. J'ai débogué le code et parcouru chaque ligne sans qu'aucune erreur ne soit générée, il doit donc être quelque part dans le code Android qui attend quelque chose qui n'est pas là.
DMac

J'aimerais également savoir comment éviter cette erreur ennuyeuse, sans supprimer / désactiver aucune fonctionnalité pour l'utilisateur final.
développeur android

1
J'ai réinitialisé le téléphone aux paramètres d'usine et il est parti, après avoir essayé le `` correctif du clavier samsung '' qui ne semblait pas faire l'affaire pour moi ...
Shark

Ce n'est peut-être pas du tout un problème, mais après la mise à niveau vers Android 4.1.1, je vois beaucoup d'erreurs dans les journaux comme celui-ci. Les travées SPAN_EXCLUSIVE_EXCLUSIVE ne peuvent pas avoir une longueur nulle
Sagar Raiyani

Réponses:


241

J'ai rencontré les mêmes entrées d'erreur dans LogCat. Dans mon cas, cela est dû au clavier tiers que j'utilise. Lorsque je le change pour le clavier Android, l'entrée d'erreur ne s'affiche plus.


3
merci @Rabi, même si je suis passé à Swiftkey et j'ai commencé à obtenir l'erreur.
Maulik Sheth

2
J'obtiens l'erreur lors de l'utilisation du clavier Android d'origine sur un Nexus 7 (édition 2012, exécutant 4.3)
Tom

(Sur Galaxy S4, 4.4.2) - Le retour au clavier Samsung d'origine a résolu ce problème. Je vous remercie!
FateNuller

6
Malheureusement, le lien de @Rabi ci-dessus n'est plus bon. Mais merci pour cela. J'utilise en effet SwiftKey et cela semble toujours causer ce problème 2 ans plus tard.
Splaktar

1
Ce problème apparaît également avec Gboard (!) (Et il vient de Google)
Aenadon

113

Parce que l'erreur que vous obtenez n'est pas liée à un EditText, alors ce n'est pas liée à votre clavier.

Les erreurs que vous obtenez ne sont pas le résultat de votre code; vous testez probablement sur un appareil Samsung équipé du TouchWiz de Samsung.

J'ai eu les mêmes erreurs, puis j'ai testé sur un Nexus S (également de Samsung, mais pur Android OS sans TouchWiz) et je n'ai pas eu cette erreur.

Donc, dans votre cas, ignorez simplement ces erreurs lors du test sur un appareil! :)


1
C'est votre clavier, probablement le clavier de TouchWiz dans votre cas. J'ai les mêmes erreurs sur un Nexus 4 avec Swiftkey, si je choisis le clavier Android par défaut, les erreurs ont disparu.
Dante

Les claviers peuvent certainement conduire à cette erreur, mais dans le cas où le clavier n'est pas utilisé ou appelé, c'est-à-dire dans le cas où il n'y a pas d'EditText, je ne vois pas comment le clavier peut être la source du problème. Lorsque je passe entre deux activités différentes, toutes deux sans EditText, j'obtiens l'erreur chaque fois que je vais à l'une de ces activités.
Karim

2
Je suis d'accord avec Cookiki, les erreurs sont dues à Samsung TouchWiz et ne causent aucun problème autre que des erreurs de crachat dans logcat. Donc, nous les
ignorerons

Nous ne pouvons pas simplement ignorer les erreurs car cela ne se produit que sur un TouchWiz, le moins est de signaler à Samsung qu'il y a un problème avec touchwiz.
Sojurn

1
Je peux très certainement se produire sans que cela soit lié à un EditText. J'ai eu cette erreur lors de l'affichage d'un PreferenceFragment avec des en-têtes - pas de zone de texte ou quoi que ce soit de ce genre. À chaque changement d'un PreferenceFragment, j'ai reçu deux de ces messages d'erreur. Passé de «Samsung Keyboard» à «Smart Keyboard Pro» et les messages d'erreur se sont arrêtés.
Magnus W

46

En regardant votre code, je ne sais pas pourquoi vous obtenez cette erreur, mais j'ai eu la même erreur mais avec les champs EditText.

Changer android:inputType="text"(ou l'une des autres variations de texte inputType) en android:inputType="textNoSuggestions"(ou android:inputType="textEmailAddress|textNoSuggestions", par exemple) l'a corrigé pour moi.

Vous pouvez également définir cela dans Code avec quelque chose comme

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

On dirait qu'Android suppose par défaut que les champs EditText contiendront des suggestions. Quand ils ne le font pas, c'est des erreurs. Pas 100% confiant dans cette explication, mais les changements mentionnés ci-dessus l'ont corrigé pour moi.

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

J'espère que cela t'aides!


Merci pour cela. Mais même avec le TextView supprimé et seule la mise en page présente, j'obtiens l'erreur. C'est très étrange.
DMac

La suppression du contentDescription de LinearLayout n'aide pas?
tim

2
Non, malheureusement non. Bien qu'avec une enquête plus approfondie, l'erreur ne semble s'afficher que sur les appareils Samsung.
DMac

14

Sur votre téléphone Android, allez dans:
paramètres -> gestionnaire d'applications -> tout -> clavier samsung puis cliquez sur "vider le cache"
(supprimer toutes les données collectées par cette application).


Wow, j'avais 68 Mo de contenu mis en cache par cette application. : O
XåpplI'-I0llwlg'I -

11

Essayez d'utiliser le clavier Android par défaut, il disparaîtra


comment utiliser le clavier par défaut.
NagarjunaReddy

1
Vous devez le modifier dans les paramètres d'entrée du téléphone. Si vous ne l'avez pas changé, vous devriez avoir un clavier par défaut. C'est une solution assez drôle avec ce clavier par défaut, mais ça marche pour moi ..: p
Krystian

4
Le clavier Android par défaut a également le problème (je l'ai sur un Nexus 5)
Yoann Hercouet

4

Indiquez clairement que vous avez transmis une valeur dans votre MainAcitivity pour les méthodes suivantes onCreateOptionsMenu et onCreate

Dans certains cas, le développeur supprime l'instruction «return super.onCreateOptionsMenu (menu)» et la remplace par «return true».


3

Cela a fonctionné pour moi ... sur tous les appareils

    <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 code 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;
        }
    });

Merci. Travaillé comme du charme
swapnil gandhi

il semble avoir un auditeur est un must
AndroidHV

Bonjour les amis, sur mon écran, n'utilisez aucun texte d'édition, n'utilisez que la disposition linéaire et le bouton.Je rencontre le même problème lorsque j'exécute l'application sur une tablette (4.1.2).
Hardik

1

J'ai eu le même avertissement et j'ai constaté que la suppression d'un @id inutilisé éliminait l'avertissement. Pour moi, c'était évident car le @id était associé à une liste croissante de textViews liées à une base de données, il y avait donc un avertissement pour chaque entrée.


1

Masood Moshref a raison, cette erreur se produit car le menu d'options de Menu n'est pas bien préparé en l'absence de "return super.onCreateOptionsMenu (menu)" dans la méthode onCreate ().


1

Pour essayer de déboguer cette erreur, accédez d'abord à votre terminal / console Android et exécutez cette commande:

ps | grep THE_ERROR_PID_YOU_GET_(IT_IS_A_NUMBER)

puis si la sortie sort comme votre application ... c'est votre application qui cause l'erreur. Essayez de chercher le vide Stringsque vous passez dans le layout.

J'ai eu exactement le même problème et c'était de ma faute car je passais un vide Stringdans ma mise en page. Après avoir changé le ""à " "cette erreur alla.

Si vous n'obtenez pas votre application à partir de la sortie de la console, c'est quelque chose d'autre qui en est la cause (probablement, comme d'autres l'ont dit, le clavier Android)


0

J'ai été confronté au même problème. J'ai presque perdu près de deux semaines pour résoudre ce problème. Finalement, j'ai eu un doute sur moi-même et j'ai essayé de créer un autre projet en copiant et collant des fichiers de démarrage comme SplashScreen & LoginScreen.

Mais avec le même code, j'obtenais toujours SPAN_EXCLUSIVE_EXCLUSIVE .

Ensuite, j'ai supprimé le code du gestionnaire de l'écran de démarrage et essayé à nouveau et Wow son fonctionnement. Je ne reçois pas de problème SPAN_EXCLUSIVE_EXCLUSIVE dans logcat .

Je me demande, pourquoi c'est? jusqu'à ce que le temps n'obtienne aucune autre solution, mais en supprimant le gestionnaire de l'écran de démarrage, cela fonctionne.

Essayez de mettre à jour ici s'il est résolu ou non.


0

Vérifiez si vous avez un élément tel qu'un bouton ou une vue de texte dupliqué (copié deux fois) dans l'écran où cela se rencontre. J'ai fait cela inaperçu et j'ai dû faire face au même problème.


0

J'ai également rencontré ce problème lorsque j'ai copié du texte sur Internet. Ma solution consiste à couper le texte / supprimer la mise en forme avant de procéder à tout autre traitement.


0

J'ai eu le même problème mais avec un listView ... je l'ai résolu parce que j'utilisais un mauvais R.id.listView que la liste View devait avoir une valeur, dans mon cas, c'était des chaînes que j'avais enregistrées sur listView2 ... donc le bon code était R.id.listView2


0

J'ai eu le même problème puis je l'ai résolu en suivant le code!

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

0

cette erreur se produit également en raison d'une URL d'API modifiée. essayez de frapper l'URL que vous utilisez dans postman et c si cela fonctionne correctement. revérifier les API a résolu mon problème


0

essayez d'éviter d'utiliser la vue dans la conception xml.J'ai aussi eu le même problème, mais lorsque j'ai supprimé la vue. son a parfaitement fonctionné.

comme exemple:

             <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" />

Vérifiez également et essayez de changer par essais et erreurs android: inputType = "number" en android: inputType = "text" ou mieux ne pas l'utiliser si ce n'est pas nécessaire. Parfois, le clavier est bloqué et obtient une erreur dans certains appareils.


0

Dans mon cas, les champs EditText avec inputType comme text / textCapCharacters casse cette erreur. J'ai remarqué cela dans mon logcat chaque fois que j'utilisais le retour arrière pour supprimer complètement le texte tapé dans l'un de ces champs.

La solution qui a fonctionné pour moi était de changer le inputType de ces champs en textNoSuggestions car c'était le type le plus adapté et ne me donnait plus d'erreurs indésirables.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.