Android - SPAN_EXCLUSIVE_EXCLUSIVE-Bereiche dürfen keine Länge von Null haben


190

Ich habe folgendes Layout (praktisch leer):

<?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>

Die Aktivitätsklasse enthält Folgendes:

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

Wenn ich dies auf meinem mobilen Gerät ausführe, wird folgende Fehlermeldung angezeigt:

SpannableStringBuilder
SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length

Ich habe dies mit und ohne TextView versucht und der Fehler bleibt weiterhin bestehen. Ich muss etwas grundlegend Falsches tun, damit ein solch grundlegendes Layout dies verursacht.

Hat jemand eine Idee, wie ich dies ohne den Fehler laden kann?


Untersuchen Sie LogCat und sehen Sie sich die Stapelverfolgung an, die Ihrem Fehler zugeordnet ist. Wenn es tatsächlich von dieser App stammt, veröffentlichen Sie den gesamten Stack-Trace als Bearbeitung für Ihre Frage. Außerdem würde ich loswerden android:contentDescriptionaus LinearLayout, wie die Behälter nicht fokussierbar ist und daher wird die Beschreibung nicht AFAIK verwendet werden.
CommonsWare

6
Vielen Dank für Ihre Antwort. Leider gibt es keine Stapelverfolgung für diesen Fehler. Die Ausgabe entspricht genau der oben angegebenen, aber das Anwendungsfeld in LogCat zeigt auf meine Anwendung. Ich habe den Code debuggt und bin durch jede Zeile gegangen, ohne dass ein Fehler ausgegeben wurde. Es muss sich also irgendwo im Android-Code befinden, der etwas erwartet, das nicht vorhanden ist.
DMac

Ich möchte wissen, wie ich diesen lästigen Fehler auch vermeiden kann, ohne eine Funktion für den Endbenutzer zu entfernen / zu deaktivieren.
Android-Entwickler

1
Ich habe das Telefon auf die Werkseinstellungen zurückgesetzt und es ging weg, nachdem ich den 'Samsung Keyboard Fix' ausprobiert hatte, der für mich nicht den Trick zu tun schien ...
Shark

Vielleicht ist es überhaupt kein Problem, aber nach dem Upgrade auf Android 4.1.1 werden in den Protokollen wie diesem viele Fehler angezeigt. SPAN_EXCLUSIVE_EXCLUSIVE Spannweiten können keine Länge von Null haben
Sagar Raiyani

Antworten:


240

Ich habe die gleichen Fehlereinträge in LogCat festgestellt. In meinem Fall liegt dies an der Tastatur eines Drittanbieters, die ich verwende. Wenn ich es wieder auf Android-Tastatur ändere, wird der Fehlereintrag nicht mehr angezeigt.


3
danke @Rabi, sogar ich wechselte zu swiftkey und bekam den Fehler.
Maulik Sheth

2
Ich erhalte den Fehler bei der Verwendung der Standard-Android-Tastatur auf einem Nexus 7 (Ausgabe 2012, mit 4.3)
Tom

(Auf dem Galaxy S4, 4.4.2) - Das Zurückschalten auf die Standard-Samsung-Tastatur hat dies für mich behoben. Danke dir!
FateNuller

6
Leider ist der Link von @Rabi oben nicht mehr gut. Aber danke dafür. Ich verwende tatsächlich SwiftKey und es scheint dieses Problem auch 2 Jahre später noch zu verursachen.
Splaktar

1
Dieses Problem tritt auch bei Gboard (!) Auf (und es ist von Google)
Aenadon

113

Da der Fehler, den Sie erhalten, nicht mit einem zusammenhängt EditText, hängt er nicht mit Ihrer Tastatur zusammen.

Die Fehler, die Sie erhalten, sind nicht auf Ihren Code zurückzuführen. Sie testen wahrscheinlich auf einem Samsung-Gerät mit Samsung TouchWiz.

Ich hatte die gleichen Fehler, dann habe ich auf einem Nexus S (ebenfalls von Samsung, aber reines Android-Betriebssystem ohne TouchWiz) getestet und diesen Fehler nicht erhalten.

Ignorieren Sie in Ihrem Fall diese Fehler einfach, während Sie auf einem Gerät testen! :) :)


1
Es ist Ihre Tastatur, wahrscheinlich die Tastatur von TouchWiz in Ihrem Fall. Ich habe die gleichen Fehler auf einem Nexus 4 mit Swiftkey. Wenn ich die Standard-Android-Tastatur wähle, sind die Fehler verschwunden.
Dante

Tastaturen können definitiv zu diesem Fehler führen, aber in dem Fall, in dem die Tastatur nicht verwendet oder aufgerufen wird, dh in dem Fall, dass keine EditText-Dateien vorhanden sind, sehe ich nicht, wie die Tastatur die Ursache des Problems sein kann. Wenn ich zwischen zwei verschiedenen Aktivitäten wechsle, beide ohne EditText, wird der Fehler jedes Mal angezeigt, wenn ich zu einer dieser Aktivitäten gehe.
Karim

2
Ich stimme Cookiki zu, die Fehler sind auf Samsung TouchWiz zurückzuführen und verursachen keine anderen Probleme als das Ausspucken von Fehlern in logcat. Also werden sie ignoriert
user2566490

Wir können Fehler nicht einfach ignorieren, da dies nur bei einem TouchWiz der Fall ist. Am wenigsten wird Samsung gemeldet, dass ein Problem mit dem TouchWiz vorliegt.
Sojurn

1
Ich kann mit Sicherheit auftreten, ohne dass es sich um einen EditText handelt. Ich hatte diesen Fehler beim Anzeigen eines PreferenceFragments mit einigen Headern - keine Textfelder oder ähnliches. Bei jeder Änderung von einem PreferenceFragment wurden zwei dieser Fehlermeldungen angezeigt. Von "Samsung Keyboard" zu "Smart Keyboard Pro" gewechselt und die Fehlermeldungen gestoppt.
Magnus W

46

Wenn ich mir Ihren Code ansehe, bin ich mir nicht sicher, warum Sie diesen Fehler erhalten, aber ich hatte denselben Fehler, jedoch mit EditText-Feldern.

Das Ändern android:inputType="text"(oder einer der anderen Textvarianten von inputType) in android:inputType="textNoSuggestions"(oder android:inputType="textEmailAddress|textNoSuggestions"zum Beispiel) hat es für mich behoben.

Sie können dies auch in Code mit so etwas wie einstellen

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

Anscheinend geht Android standardmäßig davon aus, dass EditText-Felder Vorschläge enthalten. Wenn sie es nicht tun, ist es ein Fehler. Nicht 100% zuversichtlich in diese Erklärung, aber die oben genannten Änderungen haben es für mich behoben.

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

Hoffe das hilft!


Danke dafür. Aber selbst wenn die Textansicht entfernt wurde und nur das Layout vorhanden ist, erhalte ich den Fehler. Es ist sehr seltsam.
DMac

Das Entfernen der contentDescription aus dem LinearLayout hilft nicht?
Tim

2
Nein, leider nicht. Obwohl bei weiteren Untersuchungen der Fehler nur auf Samsung-Geräten angezeigt zu werden scheint.
DMac

14

Gehen Sie auf Ihrem Android-Handy zu:
Einstellungen -> Anwendungsmanager -> Alle -> Samsung-Tastatur und klicken Sie dann auf "Cache
löschen " (löschen Sie alle von dieser Anwendung gesammelten Daten).


Wow, ich hatte 68 MB Zeug, das von dieser App zwischengespeichert wurde. : O
XåpplI'-I0llwlg'I -

11

Versuchen Sie es mit der Standard-Android-Tastatur. Sie verschwindet


Verwendung der Standardtastatur.
NagarjunaReddy

1
Sie müssen es in den Telefoneingabeeinstellungen ändern. Wenn Sie es nicht geändert haben, sollten Sie eine Standardtastatur haben. Es ist eine ziemlich lustige Lösung mit dieser Standardtastatur, aber sie funktioniert für mich ..: p
Krystian

4
Die Standard-Android-Tastatur hat auch das Problem (ich habe es auf einem Nexus 5)
Yoann Hercouet

4

Stellen Sie sicher, dass Sie in Ihrer MainAcitivity einen Wert für die folgenden Methoden onCreateOptionsMenu und onCreate übergeben haben

In einigen Fällen löscht der Entwickler die Anweisung "return super.onCreateOptionsMenu (menu)" und ändert sie in "return true".


3

Das hat bei mir funktioniert ... auf jedem Gerät

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

Im Java-Code:

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

Vielen Dank. Arbeitete wie Charme
Swapnil Gandhi

Es scheint, ein Zuhörer zu haben ist ein Muss
AndroidHV

Hallo Freunde, auf meinem Bildschirm wird kein Text bearbeitet. Verwenden Sie nur das lineare Layout und die Schaltfläche. Ich habe das gleiche Problem, wenn ich die App auf dem Tablet ausführe (4.1.2).
Hardik

1

Ich hatte die gleiche Warnung und stellte fest, dass das Entfernen einer nicht verwendeten @ -ID die Warnung beseitigte. Für mich war es offensichtlich, dass die @id mit einer wachsenden Liste von Textansichten verknüpft war, die mit einer Datenbank verknüpft waren, sodass für jeden Eintrag eine Warnung angezeigt wurde.


1

Masood Moshref ist richtig, dieser Fehler tritt auf, weil das Optionsmenü des Menüs nicht gut vorbereitet ist, da in der onCreate () -Methode "return super.onCreateOptionsMenu (menu)" fehlt.


1

Um zu versuchen, diesen Fehler zu debuggen, gehen Sie zuerst zu Ihrem Android-Terminal / Ihrer Android-Konsole und führen Sie den folgenden Befehl aus:

ps | grep THE_ERROR_PID_YOU_GET_(IT_IS_A_NUMBER)

Wenn die Ausgabe dann als Ihre App ausgegeben wird, ist es Ihre App, die den Fehler verursacht. Versuchen Sie, nach leeren zu suchen Strings, die Sie in die übergeben layout.

Ich hatte genau das gleiche Problem und es war meine Schuld, als ich ein Leerzeichen Stringin mein Layout übergab . Nach dem Ändern des ""zu " "diesem Fehler ging.

Wenn Sie Ihre App nicht über die Konsolenausgabe erhalten, ist dies eine andere Ursache (wahrscheinlich, wie andere sagten, die Android-Tastatur).


0

Ich habe das gleiche Problem konfrontiert. Ich habe fast ein paar Wochen verschwendet, um dieses Problem zu lösen. Schließlich hatte ich Zweifel an mir selbst und versuchte, ein anderes Projekt zu erstellen, indem ich einige Startdateien wie SplashScreen & LoginScreen kopierte und einfügte.

Aber mit dem gleichen Code bekam ich immer noch SPAN_EXCLUSIVE_EXCLUSIVE .

Dann habe ich den Handler-Code vom Begrüßungsbildschirm entfernt und es erneut versucht und Wow, es funktioniert. Ich erhalte kein SPAN_EXCLUSIVE_EXCLUSIVE- Problem in logcat .

Ich frage mich, warum es so ist? Bis die Zeit keine andere Lösung bekam, aber durch Entfernen des Handlers vom Begrüßungsbildschirm funktioniert es.

Versuchen Sie hier zu aktualisieren, ob es behoben ist oder nicht.


0

Überprüfen Sie, ob auf dem Bildschirm, auf den dies stößt, ein Element wie eine Schaltfläche oder eine Textansicht dupliziert (zweimal kopiert) wurde. Ich tat dies unbemerkt und musste mich dem gleichen Problem stellen.


0

Ich bin auch auf dieses Problem gestoßen, als ich Text aus dem Internet kopiert habe. Meine Lösung besteht darin, den Text zu kürzen / Formatierungen zu entfernen, bevor Sie eine weitere Verarbeitung durchführen.


0

Ich hatte das gleiche Problem, aber mit einer listView ... ich habe es gelöst, weil ich eine falsche R.id.listView verwendet habe. Diese Listenansicht musste einen Wert haben. In meinem Fall waren es Zeichenfolgen, die ich in listView2 gespeichert habe. Der richtige Code war also R.id.listView2


0

Ich hatte das gleiche Problem, dann habe ich es durch folgenden Code behoben!

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

0

Dieser Fehler tritt auch aufgrund einer geänderten API-URL auf. Versuchen Sie, die URL zu treffen, die Sie in postman und c verwenden, wenn sie ordnungsgemäß funktioniert. Das erneute Überprüfen der APIs löste mein Problem


0

Vermeiden Sie die Verwendung der Ansicht im XML-Design. Auch ich hatte das gleiche Problem, aber als ich die Ansicht entfernte. Es hat perfekt funktioniert.

wie Beispiel:

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

Überprüfen Sie auch und versuchen Sie, durch Versuch und Irrtum Android: inputType = "number" in android: inputType = "text" zu ändern, oder verwenden Sie es besser nicht, wenn es nicht benötigt wird. Manchmal bleibt die Tastatur hängen und es treten Fehler bei einigen Geräten auf.


0

In meinem Fall haben die EditText-Felder mit inputType als text / textCapCharacters diesen Fehler ausgelöst . Ich habe dies in meinem Logcat bemerkt, wenn ich die Rücktaste verwendet habe, um den in einem dieser Felder eingegebenen Text vollständig zu entfernen.

Die Lösung, die für mich funktioniert hat, bestand darin, den inputType dieser Felder in textNoSuggestions zu ändern, da dies der am besten geeignete Typ war und mir keine unerwünschten Fehler mehr gab.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.