Android - SPAN_EXCLUSIVE_EXCLUSIVE açıklıkların uzunluğu sıfır olamaz


190

Aşağıdaki düzeni var (neredeyse boş):

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

Activity sınıfı aşağıdakileri içerir:

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

Bunu mobil cihazımda çalıştırdığımda aşağıdaki hatayı alıyorum:

SpannableStringBuilder
SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length

Bu ve TextView olmadan denedim ve hata hala kalır, ben böyle bir temel düzen buna neden için temelde yanlış bir şey yapıyor olmalı.

Herkes bu hata olmadan yüklemek için nasıl alabilirim hakkında herhangi bir fikri var mı?


LogCat'i inceleyin ve hatanızla ilişkili yığın izlemesine bakın. Gerçekten bu uygulamadan geliyorsa, tüm yığın izlemesini sorunuza düzenleme olarak gönderin. Ayrıca, ben kurtulmak istiyorum android:contentDescriptiongelen LinearLayoutbu kapsayıcı odaklanamazlar ve bu nedenle açıklama afaik kullanılmayacaktır olduğu gibi.
CommonsWare

6
Yanıtınız için teşekkürler. Ne yazık ki bu hata için yığın izleme yok, çıktı tam olarak yukarıda yayınladığım gibi, ancak LogCat uygulama alanı benim uygulama işaret ediyor. Kod hata ayıklama ve hiçbir hata atılan ile her satırdan adım, bu yüzden orada olmayan bir şey bekliyor Android kodu bir yerde olması gerekir.
DMac

Son kullanıcı için herhangi bir özelliği kaldırmadan / devre dışı bırakmadan bu can sıkıcı hatayı nasıl önleyeceğimizi bilmek istiyorum.
android geliştirici

1
Telefonu fabrika ayarlarına sıfırladım ve benim için hile yapmayan 'samsung klavye düzeltmesini' denedikten sonra gitti ...
Shark

Belki de hiç sorun değil, ancak Android 4.1.1'e yükselttikten sonra, bunun gibi günlüklerde birçok hata görüyorum. SPAN_EXCLUSIVE_EXCLUSIVE açıklıkların uzunluğu sıfır olamaz
Sagar Raiyani

Yanıtlar:


241

Aynı hata girişlerini LogCat'te çalıştırdım. Benim durumumda kullandığım 3. taraf klavyesi. Tekrar Android klavyeye değiştirdiğimde hata girişi artık görünmüyor.


3
@ @ Rabi teşekkürler, ben bile hızlı anahtarı geçti ve hata almaya başladı.
Maulik Sheth

2
Bir Nexus 7'de stok klavyesini kullanırken hatayı alıyorum (2012 sürümü, 4.3 çalışıyor)
Tom

(Galaxy S4, 4.4.2'de) - Stok samsung klavyesine geri dönmek bunu benim için düzeltti. Teşekkür ederim!
FateNuller

6
Ne yazık ki yukarıdaki @Rabi'den bağlantı artık iyi değil. Ama bunun için teşekkürler. Gerçekten SwiftKey kullanıyorum ve hala 2 yıl sonra bu soruna neden oluyor gibi görünüyor.
Splaktar

1
Bu sorun Gboard (!) İle de ortaya çıkıyor (ve Google'dan geliyor)
Aenadon

113

Aldığınız hata Çünkü değil bir ilişkili EditText, o zaman oluyor değil klavyenizin ilgili.

Aldığınız hatalar kodunuzun bir sonucu değildir; muhtemelen Samsung'un TouchWiz'i olan bir Samsung cihazında test yapıyorsunuz.

Aynı hataları yaşadım, sonra bir Nexus S (ayrıca Samsung tarafından, ancak TouchWiz olmadan saf Android işletim sistemi) üzerinde test yaptım ve bu hatayı alamadım.

Yani, sizin durumunuzda, bir cihazda test ederken bu hataları görmezden gelin! :)


1
Bu sizin klavyenizdir, muhtemelen sizin durumunuzda TouchWiz'in klavyesidir. Swiftkey ile bir Nexus 4'te aynı hatalar var, varsayılan Android klavyeyi seçersem hatalar gitti.
Dante

Klavyeler kesinlikle bu hataya neden olabilir, ancak klavyenin kullanılmadığı veya çağrılmadığı durumlarda, yani EditText'in olmadığı durumlarda, klavyenin sorunun kaynağı olabileceğini göremiyorum. Her ikisi de EditText olmadan iki farklı etkinlik arasında geçiş yaptığımda, bu etkinliklerden birine her gittiğimde hatayı almaya devam ediyorum.
Karim

2
Cookiki ile hemfikirim, hatalar Samsung TouchWiz'den kaynaklanıyor ve logcat'teki hatalardan başka herhangi bir soruna neden olmuyor. Yani onları görmezden gelecek
user2566490

Hataları sadece göz ardı edemeyiz, çünkü bu sadece bir TouchWiz'de olur, en azından samsung'a touchwiz ile ilgili bir sorun olduğunu bildirir.
Sojurn

1
Kesinlikle bir EditText ile ilgili olmadan gerçekleşebilir. Bazı başlıkları ile bir PreferenceFragment görüntülerken bu hata vardı - hiçbir metin kutusu veya tür bir şey. Bir PreferenceFragment gelen her değişiklikte bu hata iletilerinden ikisini aldım. "Samsung Klavye" den "Akıllı Klavye Pro" ya geçildi ve hata mesajları durdu.
Magnus W

46

Kodunuza bakarak, neden bu hatayı aldığınızdan emin değilim, ancak aynı hatayı aldım ancak EditText alanlarıyla.

Değiştirilmesi android:inputType="text"için (veya başka bir InputType metin varyasyonların herhangi biri) android:inputType="textNoSuggestions"(ya da android:inputType="textEmailAddress|textNoSuggestions", örneğin,) benim için sabit.

Bunu Kod içinde aşağıdakine benzer bir şeyle de ayarlayabilirsiniz:

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

Görünüşe göre Android varsayılan olarak EditText alanlarının önerileri olacağını varsayar. Yapmadıkları zaman hata veriyor. Bu açıklamadan% 100 emin değilim, ancak yukarıda belirtilen değişiklikler benim için düzeltti.

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

Bu yardımcı olur umarım!


Bunun için teşekkürler. Ama TextView kaldırıldı ve sadece mevcut düzeni ile ben hata alıyorum. Bu çok garip.
DMac

İçeriği kaldırma LinearLayout'tan kaldırmak yardımcı olmuyor mu?
tim

2
Hayır maalesef değil. Her ne kadar daha fazla araştırma yapılırsa hata sadece Samsung Cihazlarda görüntüleniyor gibi görünüyor.
DMac

14

Android telefonunuzda:
ayarlar -> uygulama yöneticisi -> tüm -> samsung klavyeyi tıklayın ve sonra "önbelleği temizle" ye tıklayın
(bu uygulama tarafından toplanan tüm verileri silin).


Vay bu uygulama tarafından önbelleğe alınmış 68 MB şeyler vardı. : O
XåpplI'-I0llwlg'I -

11

Kaybolacak varsayılan Android klavyeyi kullanmayı deneyin


varsayılan klavye nasıl kullanılır.
NagarjunaReddy

1
Telefon girişi ayarlarında değiştirmeniz gerekir. Eğer değiştirmediyseniz, varsayılan klavyeniz olmalıdır. Bu varsayılan klavye ile oldukça komik bir çözüm, ama benim için çalışıyor ..: p
Krystian

4
Varsayılan Android klavyede de sorun var (bir Nexus 5'de var)
Yoann Hercouet

4

Aşağıdaki yöntemler için MainAcitivity değerinde bir değer geçirdiğinizi açıkça belirtin: onCreateOptionsMenu ve onCreate

Bazı durumlarda, geliştirici "return super.onCreateOptionsMenu (menu)" deyimini siler ve "return true" olarak değiştirilir.


3

Bu benim için çalıştı ... her cihazda

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

Java kodunda:

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

Teşekkürler.
Charm

bir dinleyici olması şart gibi
AndroidHV

Merhaba arkadaşlar, ekranımda herhangi bir Düzenleme metni kullanmıyor, sadece doğrusal düzen ve button kullan. İ tablette (4.1.2) uygulamayı çalıştırdığımda aynı sorunla karşılaşıyorum.
Hardik

1

Aynı uyarıyı aldım ve kullanılmayan bir @id'i kaldırmanın uyarıdan kurtulduğunu buldum. @İd benim için bir veritabanına bağlı artan textViews listesi ile ilişkili olduğu için açıktı, bu yüzden her giriş için bir uyarı vardı.


1

Masood Moshref haklı, bu hata onCreate () yönteminde "return super.onCreateOptionsMenu (menu)" eksikken Menu seçenek menüsü iyi hazırlanmadığı için oluşur.


1

Bu hatayı ayıklamak için önce android terminalinize / konsolunuza gidin ve şu komutu yürütün:

ps | grep THE_ERROR_PID_YOU_GET_(IT_IS_A_NUMBER)

o zaman çıktı uygulamanız olarak çıkarsa ... hataya neden olan uygulamanızdır. Stringsİçine geçmek boş aramaya çalışınlayout .

Ben aynı sorun vardı ve Stringbenim düzeni içine boş geçiyordu benim hatamdı . Değiştirdikten sonra ""hiç" " bu hatanın gitti.

Uygulamanızı konsol çıkışından alamazsanız, buna neden olan başka bir şeydir (muhtemelen, diğerlerinin söylediği gibi, android klavye)


0

Aynı sorunla karşılaştım. Bu sorunu çözmek için neredeyse birkaç hafta harcadım. Sonunda kendimden şüphe duydum ve SplashScreen & LoginScreen gibi bazı başlangıç ​​dosyalarını kopyalayıp yapıştırarak başka bir proje oluşturmaya çalıştım.

Ama aynı kodla hala SPAN_EXCLUSIVE_EXCLUSIVE alıyordum .

Sonra açılış ekranından işleyici kodu kaldırıldı ve tekrar denedim ve Wow onun çalışma. Ben almıyorum SPAN_EXCLUSIVE_EXCLUSIVE sorunu LogCat .

Merak ediyorum, neden? zamana kadar başka bir çözüm elde edene kadar, işleyiciyi açılış ekranından kaldırarak çalışıyor.

Çözülüp çözülmediğini buradan güncellemeyi deneyin.


0

Düğme veya metin görünümü gibi bunun karşılaşıldığı ekranda çoğaltılan (iki kez kopyalanan) gibi bir öğeniz olup olmadığını kontrol edin. Bunu fark edilmeden yaptım ve aynı sorunla yüzleşmek zorunda kaldım.


0

İnternetten bir metin kopyaladığımda da bu problemle karşılaştım. Benim çözüm başka herhangi bir işlem yapmadan önce metin kırpmak / biçimlendirmeyi kaldırmaktır.


0

Ben aynı sorunu vardı ama bir listView ile .... ben yanlış bir R.id.listView bu listeyi kullandım çünkü çözüldü Görünüm bir değer olması gerekiyordu, benim durumumda listView2 kaydedilen dizeleri oldu ... doğru kod R.id.listView2 idi.


0

Ben aynı sorunu vardı sonra aşağıdaki kodu ile sabit!

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

0

bu hata, değiştirilen API URL'si nedeniyle de oluşur. postacıda kullandığınız URL'ye ve düzgün çalışıyorsa c'ye vurmayı deneyin. API'ları tekrar kontrol etmek sorunumu çözdü


0

görüş kullanmaktan kaçınmaya çalışınxml tasarımında kaçının. Ben de aynı probem vardı ama ben görünümü kaldırdığınızda. mükemmel çalıştı.

örneğin:

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

Ayrıca kontrol ve deneme yanılma yoluyla değiştirmeyi deneyin android: InputType = "sayı" için android: InputType = "text" değil gerekli .Sometimes klavye sıkışmış ve cihazların bazılarında hata alırsa ya da daha iyi değil kullanmaktan.


0

Benim durumumda, text / textCapCharacters olarak inputType içeren EditText alanları bu hatayı kasaya alıyordu . Bu alanlardan herhangi birine yazılan metni tamamen kaldırmak için geri tuşuna bastığımda bunu logcat'imde fark ettim.

Benim için çalışan çözüm, bu alanların inputType'ı textNoSuggestions olarak değiştirmekti, çünkü bu en uygun tipti ve artık bana istenmeyen hatalar vermedi.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.