首页 > 解决方案 > 是什么导致“AutoCompleteTextViews”出现“setSpan”错误?

问题描述

问题:在下面的调试报告中,我想我理解问题是setSpan从负数与 0 开始。但我不知道这意味着什么,或者我是否可以修复它,因为它没有追溯到任何特定的布局、类或我创建的功能?我在此活动中没有任何代码处理setSpan

似乎正在发生的事情:它似乎发生AutoCompleteTextViews在我的 AddNote活动中。具有讽刺意味的是,这个EditNote活动在布局和功能上实际上是活动的复制品,并且不会与EditNote. 然而,一个不同之处在于AddNote它们的活动setOnFocusChangedListener

在某种程度上,它也显得随机。有时我只需单击AutoCompleteTextView它就会触发此错误。其他时候,在选择或输入数据后,焦点发生变化。

预期: AutoCompleteTextViews是带有选择或添加新内容的选项的下拉列表。我几个月来一直在从事这项活动,没有任何问题,然后这才开始发生。

下面,调试没有识别出我的任何类或资源触发了这个问题,我只是根据上面的一些细节似乎正在发生。这是我不确定是否可以更改以进行修复并想联系的原因之一。

AutoCompleteTextView 对象设置

    ArrayAdapter<String> summaryAdapter = DBQueryTools.captureSummaries(this);
    summary.setThreshold(1);
    summary.setAdapter(summaryAdapter);

    ArrayAdapter<String> topicsAdapter = DBQueryTools.captureDBTopics(this);
    topic.setThreshold(1);
    topic.setAdapter(topicsAdapter);

    ArrayAdapter<String> acQuestionAdapt = DBQueryTools.captureDBQuestions(this);
    question.setThreshold(1);
    question.setAdapter(acQuestionAdapt);

适配器代码

public static ArrayAdapter<String> captureDBTopics(Context context){
    rdb = ResearchDatabase.getInstance(context, "Apologetic.db");
    List<Topics> topics = rdb.getTopicsDao().getTopics();
    List<String> orgTopics = new ArrayList<>();
    for(Topics t : topics){
        orgTopics.add(t.getTopic());
    }
    return new ArrayAdapter<>(context, android.R.layout.simple_list_item_1, orgTopics);
    //topic.setAdapter(topicsAdapter);
}
public static ArrayAdapter<String> captureDBQuestions(Context context){
    rdb = ResearchDatabase.getInstance(context, "Apologetic.db");
    List<Questions> questions = rdb.getQuestionsDao().getQuestions();
    List<String> orgQuestions = new ArrayList<>();
    for(Questions q : questions){
        orgQuestions.add(q.getQuestion());
    }
    return new ArrayAdapter<>(context, android.R.layout.simple_list_item_1, orgQuestions);
    //question.setAdapter(acQuestionAdapt);
}
public static ArrayAdapter<String> captureSummaries(Context context){
    rdb = ResearchDatabase.getInstance(context, "Apologetic.db");
    List<Comments> summaries = rdb.getCommentsDao().getComments();
    List<String> orgSummaries = new ArrayList<>();
    for(Comments c : summaries){
        if(!c.getSummary().isEmpty() && !orgSummaries.contains(c.getSummary().trim()))
            orgSummaries.add(c.getSummary());
    }
    return new ArrayAdapter<>(context, android.R.layout.simple_list_item_1, orgSummaries);
}

调试

E/InputEventReceiver: Exception dispatching input event.
E/MessageQueue-JNI: Exception in MessageQueue callback: handleReceiveCallback
E/MessageQueue-JNI: java.lang.IndexOutOfBoundsException: setSpan (-1 ... -1) starts before 0
        at android.text.SpannableStringBuilder.checkRange(SpannableStringBuilder.java:1326)
        at android.text.SpannableStringBuilder.setSpan(SpannableStringBuilder.java:682)
        at android.text.SpannableStringBuilder.setSpan(SpannableStringBuilder.java:674)
        at android.text.Selection.setSelection(Selection.java:93)
        at android.text.Selection.setSelection(Selection.java:77)
        at android.text.method.ArrowKeyMovementMethod.onTouchEvent(ArrowKeyMovementMethod.java:291)
        at android.widget.TextView.onTouchEvent(TextView.java:10089)
        at android.view.View.dispatchTouchEvent(View.java:12513)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3030)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2719)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3030)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2719)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3030)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2719)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3030)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2719)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3030)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2719)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3030)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2719)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3030)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2719)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3030)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2719)
        at com.android.internal.policy.DecorView.superDispatchTouchEvent(DecorView.java:440)
        at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1830)
        at android.app.Activity.dispatchTouchEvent(Activity.java:3400)
        at androidx.appcompat.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:69)
        at androidx.appcompat.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:69)
        at com.android.internal.policy.DecorView.dispatchTouchEvent(DecorView.java:398)
        at android.view.View.dispatchPointerEvent(View.java:12752)
        at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:5106)
        at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4909)
        at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4426)
        at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4479)
        at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4445)
        at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:4585)
        at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4453)
        at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:4642)
        at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4426)
        at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4479)
        at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4445)
        at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4453)
        at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4426)
        at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:7092)
        at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:7061)
        at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:7022)
        at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:7195)
        at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:186)
        at android.os.MessageQueue.nativePollOnce(Native Method)
        at android.os.MessageQueue.next(MessageQueue.java:326)
        at android.os.Looper.loop(Looper.java:160)
        at android.app.ActivityThread.main(ActivityThread.java:6669)
        at java.lang.reflect.Method.invoke(
D/AndroidRuntime: Shutting down VM
E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.mistywillow.researchdb, PID: 27233
    java.lang.IndexOutOfBoundsException: setSpan (-1 ... -1) starts before 0
        at android.text.SpannableStringBuilder.checkRange(SpannableStringBuilder.java:1326)
        at android.text.SpannableStringBuilder.setSpan(SpannableStringBuilder.java:682)
        at android.text.SpannableStringBuilder.setSpan(SpannableStringBuilder.java:674)
        at android.text.Selection.setSelection(Selection.java:93)
        at android.text.Selection.setSelection(Selection.java:77)
        at android.text.method.ArrowKeyMovementMethod.onTouchEvent(ArrowKeyMovementMethod.java:291)
        at android.widget.TextView.onTouchEvent(TextView.java:10089)
        at android.view.View.dispatchTouchEvent(View.java:12513)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3030)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2719)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3030)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2719)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3030)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2719)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3030)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2719)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3030)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2719)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3030)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2719)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3030)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2719)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3030)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2719)
        at com.android.internal.policy.DecorView.superDispatchTouchEvent(DecorView.java:440)
        at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1830)
        at android.app.Activity.dispatchTouchEvent(Activity.java:3400)
        at androidx.appcompat.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:69)
        at androidx.appcompat.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:69)
        at com.android.internal.policy.DecorView.dispatchTouchEvent(DecorView.java:398)
        at android.view.View.dispatchPointerEvent(View.java:12752)
        at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:5106)
        at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4909)
        at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4426)
        at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4479)
        at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4445)
        at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:4585)
        at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4453)
        at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:4642)
        at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4426)
        at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4479)
        at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4445)
        at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4453)
        at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4426)
        at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:7092)
        at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:7061)
        at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:7022)
        at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:7195)
        at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:186)
        at android.os.MessageQueue.nativePollOnce(Native Method)
        at android.os.MessageQueue.next(MessageQueue.java:326)
E/AndroidRuntime:     at android.os.Looper.loop(Looper.java:160)
        at android.app.ActivityThread.main(ActivityThread.java:6669)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)

标签: javaandroidautocompletetextview

解决方案


这似乎是发布在问题跟踪器上的常见问题。我对以下问题添加了评论,这些评论似乎相似并且已被分配。 https://issuetracker.google.com/issues/119349156


推荐阅读