Android - SPAN_EXCLUSIVE_EXCLUSIVE bentang tidak boleh memiliki panjang nol

190

Saya memiliki tata letak berikut (hampir kosong):

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

Kelas Activity berisi yang berikut:

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

Ketika saya menjalankan ini di perangkat seluler saya, saya mendapatkan kesalahan berikut:

SpannableStringBuilder
SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length

Saya telah mencoba ini dengan dan tanpa TextView dan kesalahan masih ada, saya pasti melakukan sesuatu yang secara fundamental salah untuk tata letak dasar yang menyebabkan hal ini.

Apakah ada yang punya ide tentang bagaimana saya bisa memuat ini tanpa kesalahan?

DMac
sumber
Periksa LogCat dan lihat jejak tumpukan yang terkait dengan kesalahan Anda. Jika memang dari aplikasi ini, poskan seluruh jejak tumpukan sebagai hasil edit untuk pertanyaan Anda. Juga, saya akan menyingkirkan android:contentDescriptiondari LinearLayout, karena wadah itu tidak fokus dan karena itu deskripsi tidak akan digunakan AFAIK.
CommonsWare
6
Terimakasih atas tanggapan Anda. Sayangnya tidak ada jejak stack untuk kesalahan ini, output persis seperti yang saya posting di atas, tetapi bidang aplikasi di LogCat menunjuk ke aplikasi saya. Saya telah men-debug kode dan melangkah melalui setiap baris tanpa kesalahan yang dilemparkan, jadi pasti ada di suatu tempat dalam kode Android yang mengharapkan sesuatu yang tidak ada.
DMac
Saya ingin tahu bagaimana cara menghindari kesalahan yang mengganggu ini juga, tanpa menghapus / menonaktifkan fitur apa pun untuk pengguna akhir.
pengembang android
1
Saya mengatur ulang ponsel ke pengaturan pabrik dan hilang, setelah mencoba 'perbaikan keyboard samsung' yang sepertinya tidak melakukan trik untuk saya ...
Shark
Mungkin ini bukan masalah sama sekali, tetapi setelah memutakhirkan ke Android 4.1.1 Saya melihat banyak kesalahan dalam log seperti ini. SPAN_EXCLUSIVE_EXCLUSIVE bentang tidak boleh memiliki panjang nol
Sagar Raiyani

Jawaban:

241

Saya telah mengalami entri kesalahan yang sama di LogCat. Dalam kasus saya ini disebabkan oleh keyboard pihak ke-3 yang saya gunakan. Ketika saya mengubahnya kembali ke keyboard Android, entri kesalahan tidak muncul lagi.

Mendongkrak
sumber
3
terima kasih @Rabi, bahkan saya beralih ke swiftkey dan mulai mendapatkan kesalahan.
Maulik Sheth
2
Saya mendapatkan kesalahan saat menggunakan keyboard Android stock pada Nexus 7 (edisi 2012, menjalankan 4.3)
Tom
(Pada Galaxy S4, 4.4.2) - Beralih kembali ke keyboard samsung saham tetap ini untuk saya. Terima kasih!
FateNuller
6
Sayangnya tautan dari @Rabi di atas sudah tidak bagus lagi. Tapi terima kasih untuk ini. Saya memang menggunakan SwiftKey dan tampaknya masih menyebabkan masalah ini 2 tahun kemudian.
Splaktar
1
Masalah ini juga muncul dengan Gboard (!) (Dan ini dari Google)
Aenadon
113

Karena kesalahan yang Anda dapatkan tidak terkait dengan EditText, maka itu tidak terkait dengan keyboard Anda.

Kesalahan yang Anda dapatkan bukan hasil dari kode Anda; Anda mungkin sedang menguji pada perangkat Samsung yang memiliki TouchWiz Samsung.

Saya memiliki kesalahan yang sama, kemudian saya uji pada Nexus S (juga oleh Samsung, tetapi OS Android murni tanpa TouchWiz) dan saya tidak mendapatkan kesalahan ini.

Jadi, dalam kasus Anda, abaikan saja kesalahan ini saat menguji pada perangkat! :)

Karim
sumber
1
Ini adalah keyboard Anda, mungkin keyboard TouchWiz dalam kasus Anda. Saya memiliki kesalahan yang sama pada Nexus 4 dengan Swiftkey, jika saya memilih keyboard Android default kesalahan hilang.
Dante
Keyboard pasti dapat menyebabkan kesalahan ini, tetapi dalam kasus di mana keyboard tidak digunakan atau dipanggil, yaitu dalam kasus di mana tidak ada EditText, saya tidak melihat bagaimana keyboard dapat menjadi sumber masalah. Ketika saya beralih di antara dua aktivitas yang berbeda, keduanya tanpa EditText, saya terus mendapatkan kesalahan setiap kali saya pergi ke salah satu kegiatan ini.
Karim
2
Saya setuju dengan Cookiki, kesalahannya adalah karena Samsung TouchWiz, dan itu tidak menyebabkan masalah selain memuntahkan kesalahan dalam logcat. Jadi akan mengabaikan mereka
user2566490
Kami tidak bisa mengabaikan kesalahan karena itu hanya terjadi pada TouchWiz, yang paling sedikit melaporkan ke samsung bahwa ada masalah dengan touchwiz.
Sojurn
1
Saya pasti bisa terjadi tanpa terkait dengan EditText. Saya mengalami kesalahan ini ketika menampilkan PreferenceFragment dengan beberapa header - tidak ada kotak teks atau semacamnya. Pada setiap perubahan dari satu PreferenceFragment saya mendapat dua pesan kesalahan ini. Beralih dari "Samsung Keyboard" ke "Smart Keyboard Pro" dan pesan kesalahan berhenti.
Magnus W
46

Melihat kode Anda, saya tidak yakin mengapa Anda mendapatkan kesalahan itu, tetapi saya memiliki kesalahan yang sama tetapi dengan bidang EditText.

Mengubah android:inputType="text"(atau variasi teks inputType lainnya) menjadi android:inputType="textNoSuggestions"(atau android:inputType="textEmailAddress|textNoSuggestions", misalnya) memperbaikinya untuk saya.

Anda juga dapat mengatur ini dalam Kode dengan sesuatu seperti

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

Sepertinya Android mengasumsikan secara default bahwa bidang EditText akan memiliki saran. Ketika tidak, itu salah. Tidak 100% yakin dengan penjelasan itu, tetapi perubahan yang disebutkan di atas memperbaikinya untuk saya.

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

Semoga ini membantu!

tim
sumber
Terima kasih untuk ini. Tetapi bahkan dengan TextView dihapus dan hanya hadir tata letak saya mendapatkan kesalahan. Ini sangat aneh.
DMac
Menghapus contentDescription dari LinearLayout tidak membantu?
tim
2
Tidak, sayangnya tidak. Meskipun dengan penyelidikan lebih lanjut, kesalahan tersebut tampaknya hanya muncul pada Perangkat Samsung.
DMac
14

Di ponsel android Anda, masuk ke:
settings -> application manager -> all -> keyboard samsung dan kemudian klik "hapus cache"
(hapus semua data yang dikumpulkan oleh aplikasi ini).

Celebes
sumber
Wow saya punya 68 MB barang di-cache oleh aplikasi itu. : O
XåpplI'-I0llwlg'I -
11

Coba gunakan keyboard Android default itu akan hilang

Yasin Hassanien
sumber
cara menggunakan keyboard standar.
NagarjunaReddy
1
Anda harus mengubahnya di pengaturan input telepon. Jika Anda tidak mengubahnya, Anda harus memiliki keyboard default. Ini solusi yang cukup lucu dengan keyboard default itu, tetapi berfungsi untuk saya ..: p
Krystian
4
Keyboard Android default juga memiliki masalah (saya memilikinya di Nexus 5)
Yoann Hercouet
4

Jelaskan bahwa Anda telah memberikan nilai pada MainAcitivity Anda untuk metode berikut diCreateOptionsMenu dan onCreate

Dalam beberapa kasus, pengembang menghapus pernyataan "return super.onCreateOptionsMenu (menu)" dan berubah menjadi "return true".

Masood Moshref
sumber
3

Ini bekerja untuk saya ... di setiap perangkat

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

Dalam kode 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
sumber
Terima kasih. Bekerja seperti pesona
swapnil Gandhi
sepertinya memiliki pendengar adalah suatu keharusan
AndroidHV
Halo teman-teman, di layar saya tidak menggunakan teks Edit, Hanya gunakan tata letak linier dan tombol. Saya menghadapi masalah yang sama ketika saya menjalankan aplikasi pada tablet (4.1.2).
Hardik
1

Saya memiliki peringatan yang sama dan menemukan bahwa menghapus @id yang tidak digunakan menyingkirkan peringatan itu. Bagi saya itu jelas karena @id dikaitkan dengan daftar textViews yang berkembang yang terhubung ke database, jadi ada peringatan untuk setiap entri.

ken
sumber
1

Masood Moshref benar, kesalahan ini terjadi karena menu pilihan Menu tidak disiapkan dengan kurang "return super.onCreateOptionsMenu (menu)" dalam metode onCreate ().

hqgoldswan
sumber
1

Untuk mencoba men-debug kesalahan ini, pertama pergi ke terminal / konsol android Anda dan jalankan perintah ini:

ps | grep THE_ERROR_PID_YOU_GET_(IT_IS_A_NUMBER)

maka jika output keluar sebagai aplikasi Anda ... itu adalah aplikasi Anda yang menyebabkan kesalahan. Cobalah mencari yang kosong Stringsyang Anda lewati layout.

Saya memiliki masalah yang sama persis ini dan itu adalah kesalahan saya karena saya memasukkan kosong Stringke tata letak saya. Setelah mengubah ""ke " "kesalahan ini hilang.

Jika Anda tidak mendapatkan aplikasi dari output konsol, maka itu adalah sesuatu yang menyebabkannya (mungkin, seperti yang orang lain katakan, keyboard android)

dazito
sumber
0

Saya telah menghadapi masalah yang sama. Saya hampir menghabiskan hampir beberapa minggu untuk menyelesaikan masalah ini. Akhirnya saya ragu pada diri saya dan mencoba membuat proyek lain dengan menyalin dan menempel beberapa file startup seperti SplashScreen & LoginScreen.

Tetapi dengan kode yang sama saya masih mendapatkan SPAN_EXCLUSIVE_EXCLUSIVE .

Kemudian saya telah menghapus kode handler dari layar splash dan mencoba lagi dan Wow berfungsi. Saya tidak mendapatkan masalah SPAN_EXCLUSIVE_EXCLUSIVE di logcat .

Saya bertanya-tanya, mengapa demikian? sampai saat itu tidak mendapatkan solusi lain tetapi dengan menghapus handler dari layar splash itu berfungsi.

Coba dan perbarui di sini jika sudah teratasi atau tidak.

Sachin Shelke
sumber
0

Periksa apakah Anda memiliki elemen seperti tombol atau tampilan teks digandakan (disalin dua kali) di layar tempat ini bertemu. Saya melakukan ini tanpa disadari dan harus menghadapi masalah yang sama.

Dibyendu Mitra Roy
sumber
0

Saya mengalami masalah ini juga ketika saya menyalin beberapa teks dari Internet. Solusi saya adalah memotong teks / menghapus pemformatan sebelum melakukan pemrosesan lebih lanjut.

codingpuss
sumber
0

Saya memiliki masalah yang sama tetapi dengan listView .... saya menyelesaikannya karena saya menggunakan R.id.listView yang salah. Lihat daftar yang perlu memiliki nilai, dalam kasus saya adalah string yang saya simpan di listView2 ... jadi kode yang tepat adalah R.id.listView2

Andrey
sumber
0

Saya memiliki masalah yang sama maka saya memperbaikinya dengan mengikuti kode!

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

kesalahan ini juga terjadi karena perubahan URL API. coba tekan URL yang Anda gunakan di tukang pos dan c jika itu berfungsi dengan baik. memeriksa ulang API memecahkan masalah saya

Aditya Dabas
sumber
0

coba hindari penggunaan view dalam desain xml. Saya juga punya masalah yang sama tetapi ketika saya menghapus view. ini bekerja dengan sempurna.

seperti contoh:

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

juga periksa dan coba ubah dengan cara coba-coba android: inputType = "number" ke android: inputType = "text" atau lebih baik tidak menggunakannya jika tidak diperlukan. Kadang-kadang keyboard macet dan mendapat kesalahan di beberapa perangkat.

Eshan Chattaraj
sumber
0

Dalam kasus saya, bidang EditText dengan inputType sebagai teks / textCapCharacters yang menutupi kesalahan ini. Saya perhatikan ini di logcat saya setiap kali saya menggunakan backspace untuk sepenuhnya menghapus teks yang diketik dalam salah satu bidang ini.

Solusi yang berhasil bagi saya adalah mengubah inputType dari bidang-bidang tersebut ke textNoSuggestions karena ini adalah tipe yang paling cocok dan tidak memberi saya kesalahan yang tidak diinginkan lagi.

Ankush Chauhan
sumber