Android - ช่วง SPAN_EXCLUSIVE_EXCLUSIVE ไม่สามารถมีความยาวเป็นศูนย์ได้


190

ฉันมีเค้าโครงต่อไปนี้ (ว่างเปล่าจริง):

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

ชั้นกิจกรรมมีดังต่อไปนี้:

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

เมื่อฉันเรียกใช้สิ่งนี้บนอุปกรณ์มือถือฉันพบข้อผิดพลาดต่อไปนี้:

SpannableStringBuilder
SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length

ฉันได้ลองทำสิ่งนี้โดยไม่ใช้ TextView และข้อผิดพลาดยังคงอยู่ฉันต้องทำบางสิ่งผิดปกติโดยพื้นฐานสำหรับเลย์เอาต์พื้นฐานที่จะทำให้เกิดสิ่งนี้

ใครบ้างมีความคิดเกี่ยวกับวิธีที่ฉันจะได้รับนี้โหลดโดยไม่มีข้อผิดพลาด?


ตรวจสอบ LogCat และดูการติดตามสแต็กที่เกี่ยวข้องกับข้อผิดพลาดของคุณ ถ้ามันมาจากแอพนี้จริงๆแล้วโพสต์สแต็คติดตามทั้งหมดเป็นการแก้ไขคำถามของคุณ นอกจากนี้ผมจะได้รับการกำจัดของandroid:contentDescriptionจากLinearLayoutเป็นภาชนะที่ไม่สามารถโฟกัสและดังนั้นคำอธิบายจะไม่ถูกใช้ AFAIK
CommonsWare

6
ขอบคุณสำหรับคำตอบของคุณ น่าเสียดายที่ไม่มีการติดตามสแต็กสำหรับข้อผิดพลาดนี้ผลลัพธ์จะตรงตามที่ฉันได้โพสต์ด้านบน แต่ฟิลด์แอปพลิเคชันใน LogCat ชี้ไปที่แอปพลิเคชันของฉัน ฉันแก้ไขจุดบกพร่องของรหัสและก้าวผ่านแต่ละบรรทัดโดยไม่มีข้อผิดพลาดเกิดขึ้นดังนั้นจึงต้องอยู่ที่ไหนสักแห่งในรหัส Android ที่คาดหวังสิ่งที่ไม่มีอยู่
DMac

ฉันต้องการทราบวิธีหลีกเลี่ยงข้อผิดพลาดที่น่ารำคาญนี้เช่นกันโดยไม่ต้องลบ / ปิดการใช้งานคุณลักษณะใด ๆ สำหรับผู้ใช้ปลายทาง
นักพัฒนา android

1
ฉันรีเซ็ตโทรศัพท์ให้เป็นการตั้งค่าจากโรงงานและมันก็หายไปหลังจากลองใช้ 'การแก้ไขแป้นพิมพ์ Samsung' ซึ่งดูเหมือนจะไม่ได้ทำเคล็ดลับสำหรับฉัน ...
Shark

อาจจะไม่ใช่ปัญหาเลย แต่หลังจากอัพเกรดเป็น Android 4.1.1 ฉันเห็นข้อผิดพลาดมากมายในบันทึกเช่นนี้ SPAN_EXCLUSIVE_EXCLUSIVE ช่วงไม่สามารถมีความยาวเป็นศูนย์ได้
Sagar Raiyani

คำตอบ:


241

ฉันพบข้อผิดพลาดเดียวกันใน LogCat ในกรณีของฉันมันเกิดจากแป้นพิมพ์ของบุคคลที่สามที่ฉันใช้อยู่ เมื่อฉันเปลี่ยนกลับเป็นแป้นพิมพ์ Android รายการข้อผิดพลาดจะไม่ปรากฏขึ้นอีก


3
ขอบคุณ @Rabi แม้ฉันเปลี่ยนไปใช้ปุ่มลัดและเริ่มรับความผิดพลาด
Maulik Sheth

2
ฉันได้รับข้อผิดพลาดขณะใช้แป้นพิมพ์ Android บน Nexus 7 (รุ่น 2012 ใช้งาน 4.3)
Tom

(บน Galaxy S4, 4.4.2) - การสลับกลับไปที่แป้นพิมพ์ samsung หุ้นแก้ไขปัญหานี้ให้ฉัน ขอบคุณ!
FateNuller

6
น่าเสียดายที่ลิงค์จาก @Rabi ด้านบนไม่ดีอีกต่อไป แต่ขอบคุณสำหรับสิ่งนี้ ฉันใช้งาน SwiftKey แน่นอนและดูเหมือนว่าจะยังเป็นสาเหตุของปัญหานี้อีก 2 ปีต่อมา
Splaktar

1
ปัญหานี้ปรากฏขึ้นพร้อมกับ Gboard (!) เช่นกัน (และมาจาก Google)
Aenadon

113

เนื่องจากข้อผิดพลาดที่คุณได้รับไม่เกี่ยวข้องกับสิ่งEditTextนั้นดังนั้นจึงไม่เกี่ยวข้องกับแป้นพิมพ์ของคุณ

ข้อผิดพลาดที่คุณได้รับไม่ใช่ผลมาจากรหัสของคุณ คุณอาจกำลังทดสอบอุปกรณ์ Samsung ที่มี TouchWiz ของ Samsung

ฉันมีข้อผิดพลาดเดียวกันจากนั้นฉันทดสอบกับ Nexus S (โดย Samsung แต่เป็นระบบปฏิบัติการ Android ที่ไม่มี TouchWiz บริสุทธิ์) และฉันไม่ได้รับข้อผิดพลาดนี้

ดังนั้นในกรณีของคุณเพียงแค่ละเว้นข้อผิดพลาดเหล่านี้ขณะทดสอบบนอุปกรณ์! :)


1
มันเป็นแป้นพิมพ์ของคุณอาจเป็นแป้นพิมพ์ของ TouchWiz ในกรณีของคุณ ฉันมีข้อผิดพลาดเหมือนกันใน Nexus 4 พร้อม Swiftkey ถ้าฉันเลือกแป้นพิมพ์ Android เริ่มต้นข้อผิดพลาดจะหายไป
Dante

แป้นพิมพ์สามารถนำไปสู่ข้อผิดพลาดนี้ได้อย่างแน่นอน แต่ในกรณีที่แป้นพิมพ์ไม่ได้ถูกใช้หรือถูกเรียกเช่นในกรณีที่ไม่มี EditText ฉันไม่เห็นว่าคีย์บอร์ดสามารถเป็นสาเหตุของปัญหาได้อย่างไร เมื่อฉันสลับระหว่างสองกิจกรรมที่ต่างกันทั้งสองอย่างโดยไม่มี EditText ฉันจะได้รับข้อผิดพลาดทุกครั้งที่ฉันไปที่หนึ่งในกิจกรรมเหล่านี้
Karim

2
ฉันเห็นด้วยกับ Cookiki ข้อผิดพลาดเป็นเพราะ Samsung TouchWiz และไม่ก่อให้เกิดปัญหาใด ๆ นอกเหนือจากการพ่นข้อผิดพลาดใน logcat ดังนั้นจะไม่สนใจพวกเขา
user2566490

เราไม่สามารถเพิกเฉยต่อข้อผิดพลาดได้เพราะมันเกิดขึ้นกับ TouchWiz อย่างน้อยที่สุดก็คือการรายงานต่อซัมซุงว่ามีปัญหากับ touchwiz
Sojurn

1
ฉันสามารถเกิดขึ้นได้อย่างแน่นอนที่สุดหากไม่เกี่ยวข้องกับ EditText ฉันมีข้อผิดพลาดนี้เมื่อแสดง PreferenceFragment กับส่วนหัว - ไม่มีกล่องข้อความหรืออะไรก็ตาม ในทุกการเปลี่ยนแปลงจาก PreferenceFragment ฉันได้รับข้อความแสดงข้อผิดพลาดสองข้อความ เปลี่ยนจาก "Samsung Keyboard" เป็น "Smart Keyboard Pro" และข้อความผิดพลาดหยุดทำงาน
แมกนัส W

46

ดูที่รหัสของคุณฉันไม่แน่ใจว่าทำไมคุณถึงได้รับข้อผิดพลาดนั้น แต่ฉันมีข้อผิดพลาดเดียวกันนี้ แต่มีเขตข้อมูล EditText

การเปลี่ยนandroid:inputType="text"(หรือรูปแบบข้อความอื่น ๆ ประเภท inputType) เป็นandroid:inputType="textNoSuggestions"(หรือandroid:inputType="textEmailAddress|textNoSuggestions"ตัวอย่าง) แก้ไขให้ฉัน

คุณสามารถตั้งค่านี้ในรหัสด้วยสิ่งที่ชอบ

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

ดูเหมือนว่า Android จะถือว่าโดยค่าเริ่มต้นที่เขตข้อมูล EditText จะมีคำแนะนำ เมื่อพวกเขาทำไม่ได้มันผิดพลาด ไม่มั่นใจ 100% ในคำอธิบายนั้น แต่การเปลี่ยนแปลงดังกล่าวข้างต้นได้แก้ไขสำหรับฉันแล้ว

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

หวังว่านี่จะช่วยได้!


ขอบคุณสำหรับสิ่งนี้. แต่ถึงแม้จะมีการลบ TextView และเพียงรูปแบบปัจจุบันฉันได้รับข้อผิดพลาด มันแปลกมาก
DMac

การลบ contentDescription ออกจาก LinearLayout ไม่ได้ช่วยอะไร?
ทิม

2
ไม่น่าเสียดายไม่ใช่ แม้ว่าจะมีการตรวจสอบเพิ่มเติมข้อผิดพลาดดูเหมือนจะปรากฏบนอุปกรณ์ซัมซุงเท่านั้น
DMac

14

บนโทรศัพท์ Android ของคุณไปที่:
การตั้งค่า -> ตัวจัดการแอปพลิเคชัน -> ทั้งหมด -> แป้นพิมพ์ซัมซุงแล้วคลิกที่ "ล้างแคช"
(ลบข้อมูลทั้งหมดที่รวบรวมโดยแอปพลิเคชันนี้)


ว้าวฉันมีเนื้อหาที่แคชไว้ 68 MB โดยแอปนั้น : O
XåpplI'-I0llwlg'I -

11

ลองใช้แป้นพิมพ์ Android เริ่มต้นซึ่งจะหายไป


วิธีใช้แป้นพิมพ์เริ่มต้น
NagarjunaReddy

1
คุณต้องเปลี่ยนมันในการตั้งค่าอินพุตโทรศัพท์ หากคุณไม่ได้เปลี่ยนคุณควรมีแป้นพิมพ์เริ่มต้น มันเป็นคำตอบที่ตลกมากสำหรับแป้นพิมพ์เริ่มต้น แต่มันใช้ได้กับฉัน .. : p
Krystian

4
แป้นพิมพ์ Android เริ่มต้นยังมีปัญหา (ฉันมีใน Nexus 5)
Yoann Hercouet

4

ทำให้ชัดเจนว่าคุณได้ผ่านค่าใน MainAcitivity ของคุณสำหรับวิธีการต่อไปนี้บน CreateOptionsMenu และ onCreate

ในบางกรณีนักพัฒนาลบคำสั่ง "return super.onCreateOptionsMenu (เมนู)" และเปลี่ยนเป็น "return true"


3

สิ่งนี้ใช้ได้กับฉัน ... ในทุกอุปกรณ์

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

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

ขอบคุณ ทำตัวเหมือนมีเสน่ห์
swapnil gandhi

ดูเหมือนว่าการมีผู้ฟังเป็นสิ่งจำเป็น
AndroidHV

สวัสดีเพื่อน ๆ ในหน้าจอของฉันไม่ใช้ข้อความแก้ไขใด ๆ ใช้รูปแบบเชิงเส้นและปุ่มฉันประสบปัญหาเดียวกันเมื่อฉันเรียกใช้แอปบนแท็บเล็ต (4.1.2)
Hardik

1

ฉันมีคำเตือนแบบเดียวกันและพบว่าการลบ @id ที่ไม่ได้ใช้ออกไปจะเป็นการกำจัดคำเตือน สำหรับฉันมันชัดเจนว่า @id เชื่อมโยงกับรายการ textViews ที่เพิ่มขึ้นซึ่งเชื่อมโยงกับฐานข้อมูลดังนั้นจึงมีคำเตือนสำหรับแต่ละรายการ


1

Masood Moshref ถูกต้องข้อผิดพลาดนี้เกิดขึ้นเนื่องจากเมนูตัวเลือกของเมนูไม่ได้เตรียมไว้อย่างดีโดยขาด "return super.onCreateOptionsMenu (เมนู)" ในเมธอด onCreate ()


1

หากต้องการลองแก้ไขข้อผิดพลาดนี้ก่อนอื่นให้ไปที่ android terminal / console และดำเนินการตามคำสั่งนี้:

ps | grep THE_ERROR_PID_YOU_GET_(IT_IS_A_NUMBER)

ถ้าผลลัพธ์ออกมาเป็นแอพของคุณ ... มันเป็นแอพของคุณที่ทำให้เกิดข้อผิดพลาด ลองมองหาที่ว่างเปล่าStringsที่คุณผ่านเข้ามาlayoutมา

ฉันมีปัญหาเดียวกันนี้อย่างแน่นอนและมันเป็นความผิดของฉันเพราะฉันผ่านที่ว่างStringในเค้าโครงของฉัน หลังจากที่เปลี่ยน""ไป" "เกิดข้อผิดพลาดนี้กลับออกไป

หากคุณไม่ได้รับแอปของคุณจากคอนโซลเอาต์พุตมันเป็นอย่างอื่นที่ทำให้เกิด (อาจเป็นอย่างอื่นที่กล่าวว่าแป้นพิมพ์ Android)


0

ฉันต้องเผชิญกับปัญหาเดียวกัน ฉันเกือบจะเสียเวลาไปเกือบสองสัปดาห์เพื่อแก้ไขปัญหานี้ ในที่สุดฉันก็สงสัยในตัวเองและพยายามสร้างโครงการอื่นโดยการคัดลอกและวางไฟล์เริ่มต้นบางอย่างเช่น SplashScreen และ LoginScreen

แต่ด้วยรหัสเดียวกันยังคงฉันได้รับSPAN_EXCLUSIVE_EXCLUSIVE

จากนั้นฉันได้ลบรหัสตัวจัดการออกจากหน้าจอสแปลชและลองอีกครั้งและว้าวทำงานได้ ฉันไม่ได้รับSPAN_EXCLUSIVE_EXCLUSIVEปัญหาในlogcat

ฉันสงสัยว่าทำไม จนถึงเวลาที่ไม่ได้รับการแก้ปัญหาอื่น ๆ แต่ด้วยการลบตัวจัดการจากหน้าจอสแปลมันทำงาน

ลองและอัปเดตที่นี่หากได้รับการแก้ไขหรือไม่


0

ตรวจสอบว่าคุณมีองค์ประกอบใด ๆ เช่นปุ่มหรือมุมมองข้อความซ้ำ (คัดลอกสองครั้ง) ในหน้าจอที่พบนี้ ฉันทำแบบนี้โดยไม่มีใครสังเกตเห็นและต้องเผชิญกับปัญหาเดียวกัน


0

ฉันพบปัญหานี้เช่นกันเมื่อฉันคัดลอกข้อความบางส่วนจากอินเทอร์เน็ต ทางออกของฉันคือการตัดแต่งข้อความ / ลบการจัดรูปแบบก่อนที่จะดำเนินการใด ๆ เพิ่มเติม


0

ฉันมีปัญหาเดียวกัน แต่มี listView .... ฉันแก้ไขได้เพราะฉันใช้ R.id.listView ผิดรายการนั้น View จำเป็นต้องมีค่าในกรณีของฉันมันเป็นสตริงที่ฉันบันทึกไว้ใน listView2 ... ดังนั้นรหัสที่ถูกต้องคือ R.id.listView2


0

ฉันมีปัญหาเดียวกันจากนั้นฉันก็แก้ไขได้ด้วยรหัสต่อไปนี้!

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

0

ข้อผิดพลาดนี้ก็เกิดขึ้นเนื่องจาก URL API ที่มีการเปลี่ยนแปลง ลองกด URL ที่คุณใช้ในบุรุษไปรษณีย์และ c หากมันทำงานอย่างถูกต้อง การตรวจสอบ API อีกครั้งช่วยแก้ปัญหาของฉันได้


0

พยายามหลีกเลี่ยงการใช้มุมมองในการออกแบบ xml ฉันก็มีโพรบเหมือนกัน แต่เมื่อฉันลบมุมมองออก มันทำงานได้อย่างสมบูรณ์

เช่นตัวอย่าง:

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

ตรวจสอบและลองเปลี่ยนโดยทดลองใช้และข้อผิดพลาดandroid: inputType = "number"เป็นandroid: inputType = "text"หรือดีกว่าไม่ใช้ถ้าไม่จำเป็นแป้นพิมพ์บางครั้งติดอยู่และได้รับข้อผิดพลาดในอุปกรณ์บางอย่าง


0

ในกรณีของฉันฟิลด์ EditText ที่มี inputType เป็นtext / textCapCharactersกำลังทำข้อผิดพลาดนี้อยู่ ฉันสังเกตเห็นสิ่งนี้ใน logcat ของฉันเมื่อใดก็ตามที่ฉันใช้ backspace เพื่อลบข้อความที่พิมพ์ในฟิลด์เหล่านี้อย่างสมบูรณ์

วิธีแก้ปัญหาที่เหมาะกับฉันคือเปลี่ยน inputType ของฟิลด์เหล่านั้นเป็นtextNoSuggestionsเนื่องจากเป็นประเภทที่เหมาะสมที่สุดและไม่ได้ให้ข้อผิดพลาดที่ไม่ต้องการอีกต่อไป

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.