Android - SPAN_EXCLUSIVE_EXCLUSIVE kéo dài không thể có độ dài bằng không


190

Tôi có bố cục sau (hầu như trống rỗng):

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

Lớp Activity chứa các mục sau:

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

Khi tôi chạy cái này trên thiết bị di động, tôi gặp phải lỗi sau:

SpannableStringBuilder
SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length

Tôi đã thử điều này với và không có TextView và lỗi vẫn còn, tôi phải làm điều gì đó sai về cơ bản cho bố cục cơ bản như vậy để gây ra điều này.

Có ai có bất kỳ ý tưởng về làm thế nào tôi có thể tải cái này mà không có lỗi không?


Kiểm tra LogCat và xem dấu vết ngăn xếp liên quan đến lỗi của bạn. Nếu nó thực sự là từ ứng dụng này, hãy đăng toàn bộ dấu vết ngăn xếp dưới dạng chỉnh sửa cho câu hỏi của bạn. Ngoài ra, tôi sẽ thoát khỏi android:contentDescriptiontừ LinearLayout, như container điều đó là không thể đặt tiêu điểm và do đó mô tả sẽ không được sử dụng AFAIK.
CommonsWare

6
Cám ơn phản hồi của bạn. Thật không may, không có dấu vết ngăn xếp cho lỗi này, đầu ra chính xác như tôi đã đăng ở trên, nhưng trường ứng dụng trong LogCat không trỏ đến ứng dụng của tôi. Tôi đã gỡ lỗi mã và bước qua từng dòng mà không có lỗi nào được đưa ra, vì vậy nó phải ở đâu đó trong mã Android đang mong đợi thứ gì đó không có ở đó.
DMac

Tôi cũng muốn biết cách tránh lỗi gây phiền nhiễu này mà không xóa / tắt bất kỳ tính năng nào cho người dùng cuối.
nhà phát triển Android

1
Tôi đặt lại điện thoại về cài đặt gốc và nó biến mất, sau khi thử 'sửa lỗi bàn phím samsung' dường như không phải là mẹo cho tôi ...
Shark

Có lẽ nó hoàn toàn không phải là vấn đề, nhưng sau khi nâng cấp lên Android 4.1.1, tôi thấy rất nhiều lỗi trong nhật ký như thế này. Các nhịp SPAN_EXCLUSIVE_EXCLUSIVE không thể có độ dài bằng 0
Sagar Raiyani

Câu trả lời:


240

Tôi đã chạy vào các mục lỗi tương tự trong LogCat. Trong trường hợp của tôi, đó là do bàn phím của bên thứ 3 tôi đang sử dụng. Khi tôi thay đổi nó trở lại bàn phím Android, mục lỗi không hiển thị nữa.


3
cảm ơn @Rabi, thậm chí tôi đã chuyển sang swiftkey và bắt đầu gặp lỗi.
Maulik Sheth

2
Tôi gặp lỗi khi sử dụng bàn phím Android gốc trên Nexus 7 (phiên bản 2012, chạy 4.3)
Tom

(Trên Galaxy S4, 4.4.2) - Chuyển đổi trở lại bàn phím samsung đã sửa lỗi này cho tôi. Cảm ơn bạn!
FateNuller

6
Thật không may, liên kết từ @Rabi ở trên không còn tốt nữa. Nhưng cảm ơn bạn vì điều này. Tôi thực sự đang sử dụng SwiftKey và dường như nó vẫn gây ra vấn đề này 2 năm sau.
Splaktar

1
Vấn đề này cũng xuất hiện với Gboard (!) (Và nó từ Google)
Aenadon

113

Vì lỗi bạn gặp không liên quan đến lỗi EditText, nên nó không liên quan đến bàn phím của bạn.

Các lỗi bạn đang nhận không phải là kết quả của mã của bạn; có lẽ bạn đang thử nghiệm trên thiết bị Samsung có TouchWiz của Samsung.

Tôi cũng gặp lỗi tương tự, sau đó tôi đã thử nghiệm trên Nexus S (cũng bởi Samsung, nhưng hệ điều hành Android thuần túy không có TouchWiz) và tôi đã không gặp phải lỗi này.

Vì vậy, trong trường hợp của bạn, chỉ cần bỏ qua các lỗi này trong khi thử nghiệm trên thiết bị! :)


1
Đó là bàn phím của bạn, có lẽ là bàn phím của TouchWiz trong trường hợp của bạn. Tôi có cùng một lỗi trên Nexus 4 với Swiftkey, nếu tôi chọn bàn phím Android mặc định thì các lỗi đã biến mất.
Dante

Bàn phím chắc chắn có thể dẫn đến lỗi này, nhưng trong trường hợp bàn phím không được sử dụng hoặc gọi, tức là trong trường hợp không có EditText, tôi không thấy bàn phím có thể là nguồn gốc của vấn đề. Khi tôi chuyển đổi giữa hai hoạt động khác nhau, cả hai đều không có EditText, tôi liên tục gặp lỗi mỗi khi tôi đến một trong những hoạt động này.
Karim

2
Tôi đồng ý với Cookiki, các lỗi là do Samsung TouchWiz và nó không gây ra bất kỳ vấn đề nào ngoài lỗi phát sinh trong logcat. Vì vậy, sẽ bỏ qua chúng
user2566490

Chúng tôi không thể bỏ qua các lỗi vì nó chỉ xảy ra trên TouchWiz, ít nhất là báo cáo với samsung rằng có vấn đề với touchwiz.
Khởi hành

1
Tôi chắc chắn có thể xảy ra mà không liên quan đến EditText. Tôi đã gặp lỗi này khi hiển thị PreferenceFragment với một số tiêu đề - không có hộp văn bản hoặc bất cứ thứ gì thuộc loại này. Trên mỗi thay đổi từ một PreferenceFragment, tôi nhận được hai trong số các thông báo lỗi này. Chuyển từ "Bàn phím Samsung" sang "Bàn phím thông minh Pro" và các thông báo lỗi đã dừng.
Magnus W

46

Nhìn vào mã của bạn, tôi không chắc tại sao bạn lại gặp phải lỗi đó, nhưng tôi cũng gặp lỗi tương tự nhưng với các trường EditText.

Việc thay đổi android:inputType="text"(hoặc bất kỳ biến thể văn bản inputType nào khác) thành android:inputType="textNoSuggestions"(hoặc android:inputType="textEmailAddress|textNoSuggestions", chẳng hạn) đã sửa nó cho tôi.

Bạn cũng có thể đặt mã này trong Code với nội dung như

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

Có vẻ như Android giả định theo mặc định rằng các trường EditText sẽ có đề xuất. Khi họ không, nó lỗi. Không tin tưởng 100% vào lời giải thích đó, nhưng những thay đổi được đề cập ở trên đã khắc phục nó cho tôi.

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

Hi vọng điêu nay co ich!


Cảm ơn vì điều đó. Nhưng ngay cả khi TextView bị xóa và chỉ có bố cục hiện tại tôi vẫn gặp lỗi. Nó là rất lạ.
DMac

Xóa nội dung Mô tả khỏi linearLayout không giúp ích gì?
tim

2
Không tiếc là không. Mặc dù với điều tra thêm, lỗi dường như chỉ hiển thị trên Thiết bị Samsung.
DMac

14

Trên điện thoại Android của bạn, hãy đi tới:
cài đặt -> trình quản lý ứng dụng -> tất cả -> bàn phím samsung và sau đó nhấp vào "xóa bộ nhớ cache"
(xóa tất cả dữ liệu được thu thập bởi ứng dụng này).


Ồ, tôi có 68 MB thứ được lưu trong bộ nhớ cache của ứng dụng đó. : O
XåpplI'-I0llwlg'I -

11

Hãy thử sử dụng bàn phím Android mặc định, nó sẽ biến mất


Cách sử dụng bàn phím mặc định.
NagarjunaReddy

1
Bạn phải thay đổi nó trong cài đặt đầu vào điện thoại. Nếu bạn không thay đổi nó, bạn nên có bàn phím mặc định. Đó là giải pháp khá buồn cười với bàn phím mặc định đó, nhưng nó hoạt động với tôi ..: p
Krystian

4
Bàn phím Android mặc định cũng có vấn đề (tôi có nó trên Nexus 5)
Yoann Hercouet

4

Làm rõ rằng bạn đã vượt qua một giá trị trong MainAc nhạy của bạn cho các phương thức sau đây onCreateOptionsMothy và onCreate

Trong một số trường hợp, nhà phát triển xóa câu lệnh "return super.onCreateOptionsMothy (menu)" và thay đổi thành "return true".


3

Điều này làm việc cho tôi ... trên mọi thiết bị

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

Trong mã 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;
        }
    });

Cảm ơn. Làm việc như bùa mê
hoán đổi gandhi

có vẻ như phải có người nghe
AndroidHV

Xin chào các bạn, trong màn hình của tôi không sử dụng bất kỳ văn bản Chỉnh sửa nào, Chỉ sử dụng bố cục tuyến tính và button.i gặp vấn đề tương tự khi tôi chạy ứng dụng trên máy tính bảng (4.1.2).
Hardik

1

Tôi đã có cảnh báo tương tự và thấy rằng việc xóa một @id không sử dụng đã thoát khỏi cảnh báo. Đối với tôi, điều hiển nhiên là @id được liên kết với một danh sách ngày càng tăng của các TextView được liên kết với cơ sở dữ liệu, do đó, có một cảnh báo cho mỗi mục.


1

Masood Moshref đã đúng, lỗi này xảy ra do menu tùy chọn của Menu không được chuẩn bị tốt bằng cách thiếu "return super.onCreateOptionsMothy (menu)" trong phương thức onCreate ().


1

Để thử gỡ lỗi này, trước tiên hãy vào thiết bị đầu cuối / bảng điều khiển Android của bạn và thực hiện lệnh này:

ps | grep THE_ERROR_PID_YOU_GET_(IT_IS_A_NUMBER)

sau đó nếu đầu ra xuất hiện dưới dạng ứng dụng của bạn ... thì đó là ứng dụng của bạn gây ra lỗi. Cố gắng tìm kiếm trống Stringsmà bạn chuyển vào layout.

Tôi đã có vấn đề chính xác như vậy và đó là lỗi của tôi khi tôi chuyển một khoảng trống Stringvào bố cục của mình. Sau khi thay đổi ""để " "lỗi này đi.

Nếu bạn không nhận được ứng dụng của mình từ đầu ra giao diện điều khiển, thì đó là một thứ khác gây ra nó (có thể, như những người khác đã nói, bàn phím Android)


0

Tôi đã phải đối mặt với cùng một vấn đề. Tôi gần như lãng phí gần vài tuần để giải quyết vấn đề này. Cuối cùng, tôi đã nghi ngờ chính mình và đã cố gắng tạo một dự án khác bằng cách sao chép và dán một số tệp khởi động như SplashScreen & LoginScreen.

Nhưng với cùng một mã, tôi vẫn nhận được SPAN_EXCLUSIVE_EXCLUSIVE .

Sau đó, tôi đã loại bỏ mã xử lý khỏi màn hình giật gân và thử lại và Wow nó hoạt động. Tôi không gặp vấn đề SPAN_EXCLUSIVE_EXCLUSIVE trong logcat .

Tôi tự hỏi, tại sao vậy? cho đến thời điểm đó không nhận được bất kỳ giải pháp nào khác nhưng bằng cách loại bỏ trình xử lý khỏi màn hình giật gân, nó đang hoạt động.

Hãy thử và cập nhật ở đây nếu nó được giải quyết hay không.


0

Kiểm tra xem bạn có bất kỳ yếu tố nào không, chẳng hạn như nút hoặc chế độ xem văn bản được sao chép (sao chép hai lần) trong màn hình nơi gặp phải điều này. Tôi đã làm điều này không được chú ý và phải đối mặt với cùng một vấn đề.


0

Tôi cũng gặp phải vấn đề này khi sao chép một số văn bản từ Internet. Giải pháp của tôi là cắt bớt văn bản / xóa định dạng trước khi thực hiện bất kỳ xử lý nào khác.


0

Tôi gặp vấn đề tương tự nhưng với listView .... tôi đã giải quyết nó vì tôi đã sử dụng sai R.id.listView mà danh sách View cần có một giá trị, trong trường hợp của tôi, đó là các chuỗi mà tôi đã lưu trên listView2 ... vì vậy mã đúng là R.id.listView2


0

Tôi đã có cùng một vấn đề sau đó tôi đã sửa nó bằng cách làm theo mã!

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

0

lỗi này cũng xảy ra do URL API thay đổi. hãy thử nhấn URL bạn đang sử dụng trong postman và c nếu nó hoạt động đúng. kiểm tra lại các API đã giải quyết vấn đề của tôi


0

cố gắng tránh sử dụng chế độ xem trong thiết kế xml. Tôi cũng có cùng một chế độ nhưng khi tôi xóa chế độ xem. nó hoạt động hoàn hảo.

như ví dụ:

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

đồng thời kiểm tra và thử thay đổi bằng cách dùng thử và lỗi android: inputType = "number" sang android: inputType = "text" hoặc tốt hơn là không sử dụng nó nếu không bắt buộc. Bàn phím của bạn bị kẹt và bị lỗi ở một số thiết bị.


0

Trong trường hợp của tôi, các trường EditText có inputType dưới dạng text / textCapChar character đã gây ra lỗi này. Tôi nhận thấy điều này trong logcat của tôi bất cứ khi nào tôi sử dụng backspace để loại bỏ hoàn toàn văn bản được gõ trong bất kỳ trường nào trong số này.

Giải pháp hiệu quả với tôi là thay đổi Kiểu đầu vào của các trường đó thành textNoSuggestions vì đây là loại phù hợp nhất và không còn cho tôi bất kỳ lỗi không mong muốn nào nữa.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.