机器人上的EditText长按:ArrayIndexOutOfBoundsException异常:

2019-09-02 06:14发布

我有这种奇怪的行为,我无法解释。 我的布局非常简单:一个EditText:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="vertical"
    android:padding="10dp" >


        <EditText
            android:id="@+id/etPass"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

</LinearLayout>

当我尝试长按它(粘贴一些文本),我得到了一个imediate强制关闭,但此错误:

05-08 16:56:16.838: E/AndroidRuntime(12164): FATAL EXCEPTION: main
05-08 16:56:16.838: E/AndroidRuntime(12164): android.view.InflateException: Binary XML file line #17: Error inflating class <unknown>
05-08 16:56:16.838: E/AndroidRuntime(12164):    at android.view.LayoutInflater.createView(LayoutInflater.java:613)
05-08 16:56:16.838: E/AndroidRuntime(12164):    at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)
05-08 16:56:16.838: E/AndroidRuntime(12164):    at android.view.LayoutInflater.onCreateView(LayoutInflater.java:660)
05-08 16:56:16.838: E/AndroidRuntime(12164):    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:685)
05-08 16:56:16.838: E/AndroidRuntime(12164):    at android.view.LayoutInflater.inflate(LayoutInflater.java:466)
05-08 16:56:16.838: E/AndroidRuntime(12164):    at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
05-08 16:56:16.838: E/AndroidRuntime(12164):    at android.view.LayoutInflater.inflate(LayoutInflater.java:352)
05-08 16:56:16.838: E/AndroidRuntime(12164):    at android.widget.Editor$ActionPopupWindow.initContentView(Editor.java:2995)
05-08 16:56:16.838: E/AndroidRuntime(12164):    at android.widget.Editor$PinnedPopupWindow.<init>(Editor.java:2280)
05-08 16:56:16.838: E/AndroidRuntime(12164):    at android.widget.Editor$ActionPopupWindow.<init>(Editor.java:2968)
05-08 16:56:16.838: E/AndroidRuntime(12164):    at android.widget.Editor$ActionPopupWindow.<init>(Editor.java:2968)
05-08 16:56:16.838: E/AndroidRuntime(12164):    at android.widget.Editor$HandleView.showActionPopupWindow(Editor.java:3189)
05-08 16:56:16.838: E/AndroidRuntime(12164):    at android.widget.Editor$InsertionHandleView.showWithActionPopup(Editor.java:3416)
05-08 16:56:16.838: E/AndroidRuntime(12164):    at android.widget.Editor$InsertionPointCursorController.showWithActionPopup(Editor.java:3652)
05-08 16:56:16.838: E/AndroidRuntime(12164):    at android.widget.Editor.performLongClick(Editor.java:870)
05-08 16:56:16.838: E/AndroidRuntime(12164):    at android.widget.TextView.performLongClick(TextView.java:7973)
05-08 16:56:16.838: E/AndroidRuntime(12164):    at android.view.View$CheckForLongPress.run(View.java:17140)
05-08 16:56:16.838: E/AndroidRuntime(12164):    at android.os.Handler.handleCallback(Handler.java:615)
05-08 16:56:16.838: E/AndroidRuntime(12164):    at android.os.Handler.dispatchMessage(Handler.java:92)
05-08 16:56:16.838: E/AndroidRuntime(12164):    at android.os.Looper.loop(Looper.java:213)
05-08 16:56:16.838: E/AndroidRuntime(12164):    at android.app.ActivityThread.main(ActivityThread.java:4786)
05-08 16:56:16.838: E/AndroidRuntime(12164):    at java.lang.reflect.Method.invokeNative(Native Method)
05-08 16:56:16.838: E/AndroidRuntime(12164):    at java.lang.reflect.Method.invoke(Method.java:511)
05-08 16:56:16.838: E/AndroidRuntime(12164):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
05-08 16:56:16.838: E/AndroidRuntime(12164):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:556)
05-08 16:56:16.838: E/AndroidRuntime(12164):    at dalvik.system.NativeStart.main(Native Method)
05-08 16:56:16.838: E/AndroidRuntime(12164): Caused by: java.lang.reflect.InvocationTargetException
05-08 16:56:16.838: E/AndroidRuntime(12164):    at java.lang.reflect.Constructor.constructNative(Native Method)
05-08 16:56:16.838: E/AndroidRuntime(12164):    at java.lang.reflect.Constructor.newInstance(Constructor.java:417)
05-08 16:56:16.838: E/AndroidRuntime(12164):    at android.view.LayoutInflater.createView(LayoutInflater.java:587)
05-08 16:56:16.838: E/AndroidRuntime(12164):    ... 25 more
05-08 16:56:16.838: E/AndroidRuntime(12164): Caused by: java.lang.ArrayIndexOutOfBoundsException: length=15; index=491
05-08 16:56:16.838: E/AndroidRuntime(12164):    at android.content.res.StringBlock.get(StringBlock.java:64)
05-08 16:56:16.838: E/AndroidRuntime(12164):    at android.content.res.XmlBlock$Parser.getPooledString(XmlBlock.java:458)
05-08 16:56:16.838: E/AndroidRuntime(12164):    at android.content.res.TypedArray.loadStringValueAt(TypedArray.java:720)
05-08 16:56:16.838: E/AndroidRuntime(12164):    at android.content.res.TypedArray.getString(TypedArray.java:124)
05-08 16:56:16.838: E/AndroidRuntime(12164):    at android.widget.TextView.<init>(TextView.java:800)
05-08 16:56:16.838: E/AndroidRuntime(12164):    at android.widget.TextView.<init>(TextView.java:450)
05-08 16:56:16.838: E/AndroidRuntime(12164):    ... 28 more

我也实在没有线索发生了什么,我会很高兴得到一些帮助!

只是要清楚,我没有在我的活动有关这个EditText上的监听器:

import android.app.Activity;
import android.os.Bundle;

public class ProActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        this.setContentView(R.layout.activity_pro);

    }

}

Answer 1:

刚刚从你的自定义样式删除此行

这一行:

  <item name="android:fontFamily">sans-serif-light</item>

会使撞车的EditText长按它的时候。

Android的复制/粘贴弹出了错误的根本原因。



Answer 2:

这个环节解决了我的问题,虽然自动完成在XML文件中是行不通的,但在这个例子中的代码是正确的,我宣布所有在相同的样式文件和它的工作:

https://github.com/rengwuxian/MaterialEditText/issues/162

这就是在它说:

似乎是在风格的错误,验证是否有

<item name="android:fontFamily"></item>

在应用程序中的主题,而不是在主题视图,在应用的主题。 发生在我身上的同样的错误,直到我删除了这条线我style.xml的,如果你有行,删除它们,如果你需要这个属性,你可以风格化textviews和按钮:

<style name="TextViewStyle" parent="android:Widget.TextView">
    <item name="android:fontFamily">sans-serif-medium</item>
</style>

<style name="ButtonStyle" parent="android:Widget.Holo.Button">
    <item name="android:fontFamily">sans-serif-medium</item>
</style>

而在你的应用程序的主题,使用方法:

<item name="android:textViewStyle">@style/TextViewStyle</item>
<item name="android:buttonStyle">@style/ButtonStyle</item>


Answer 3:

我也遇到了这个问题;

但它的原因是,我使用ContextThemeWrapper;

这里是我们如何从ContextThemeWrapper得到LayoutInflater

@Override 
public Object getSystemService(String name) {
    if (LAYOUT_INFLATER_SERVICE.equals(name)) {
        if (mInflater == null) {
            mInflater = LayoutInflater.from(mBase).cloneInContext(this);
        }
        return mInflater;
    }
    return mBase.getSystemService(name);
}

从上面的代码块中,我们可以看到,它处理LayoutInflater特别,这是问题的根源。

我的解决方法是:重写此方法如下

@Override
public Object getSystemService(String name){
    return getBaseContext().getSystemService(name);
}


Answer 4:

我使用时出现这种问题<item name="android:fontFamily">sans-serif</item>style.xml

会崩溃

  • 三星S4(SC-04E)(5.0.1)
  • 三星Galaxy节点5(5.1.1)

不会崩溃

  • 三星 S7边缘(SM-G935F)(7.0)
  • 小蜜A2(8.0.1)
  • 像素XL(8.1.0)
  • 索尼的Xperia Z5 AU(SOV32)(6.0)
  • 箭NX(F-04G)(6.0.1)
  • 京瓷(S2)(7.0)

起初,我觉得这个问题只会发生在Samsung ,但三星S7不死机。

然后,我想是因为当前崩溃装置具有API <6.0的API可能会导致此问题。 但是我不知道这件事,因为我没有测试很多设备

摘要:它将在一些设备崩溃

要解决这个问题
首先,删除sans-serif
然后下载Roboto从字体https://github.com/google/fonts/tree/master/apache/roboto然后添加到项目以下https://developer.android.com/guide/topics/ui/look-and-feel /字体功能于XML

为什么 Roboto字体?
您正在使用的时候面临这个问题sans-serif字体吗? sans-serif在Android是Roboto字体(在这里看到Android的默认字体 )

如果你知道一些设备将崩溃,请编辑我的答案,它可以帮助进行测试。
希望它能帮助



文章来源: Android EditText on longPress: ArrayIndexOutOfBoundsException: length=15; index=491