2012-10-11 5 views
17

Ich habe offenbar ein Problem mit 1 Aktivität auf einem Samsung Nexus in einer App und ich kann nicht verstehen, was das Problem verursacht.Ich kann das Problem mit einem Stacktrace Fehler

java.lang.ArrayIndexOutOfBoundsException: length=244; index=1753 
at android.text.MeasuredText.addStyleRun(MeasuredText.java:168) 
at android.text.MeasuredText.addStyleRun(MeasuredText.java:204) 
at android.text.StaticLayout.generate(StaticLayout.java:281) 
at android.text.StaticLayout.<init>(StaticLayout.java:140) 
at android.text.StaticLayout.<init>(StaticLayout.java:80) 
at android.text.StaticLayout.<init>(StaticLayout.java:59) 
at android.widget.TextView.makeSingleLayout(TextView.java:5901) 
at android.widget.TextView.makeNewLayout(TextView.java:5741) 
at android.widget.TextView.onMeasure(TextView.java:6098) 
at android.view.View.measure(View.java:15172) 
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4814) 
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1390) 
at android.widget.LinearLayout.measureHorizontal(LinearLayout.java:1038) 
at android.widget.LinearLayout.onMeasure(LinearLayout.java:576) 
at android.view.View.measure(View.java:15172) 
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4814) 
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1390) 
at android.widget.LinearLayout.measureVertical(LinearLayout.java:681) 
at android.widget.LinearLayout.onMeasure(LinearLayout.java:574) 
at android.view.View.measure(View.java:15172) 
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4814) 
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1390) 
at android.widget.LinearLayout.measureVertical(LinearLayout.java:681) 
at android.widget.LinearLayout.onMeasure(LinearLayout.java:574) 
at android.view.View.measure(View.java:15172) 
at android.widget.ScrollView.measureChildWithMargins(ScrollView.java:1196) 
at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 
at android.widget.ScrollView.onMeasure(ScrollView.java:318) 
at android.view.View.measure(View.java:15172) 
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4814) 
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1390) 
at android.widget.LinearLayout.measureVertical(LinearLayout.java:681) 
at android.widget.LinearLayout.onMeasure(LinearLayout.java:574) 
at android.view.View.measure(View.java:15172) 
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4814) 
at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 
at android.view.View.measure(View.java:15172) 
at android.widget.LinearLayout.measureVertical(LinearLayout.java:833) 
at android.widget.LinearLayout.onMeasure(LinearLayout.java:574) 
at android.view.View.measure(View.java:15172) 
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4814) 
at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 
at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2148) 
at android.view.View.measure(View.java:15172) 
at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1848) 
at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1100) 
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1273) 
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:998) 
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4212) 
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:725) 
at android.view.Choreographer.doCallbacks(Choreographer.java:555) 
at android.view.Choreographer.doFrame(Choreographer.java:525) 
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:711) 
at android.os.Handler.handleCallback(Handler.java:615) 
at android.os.Handler.dispatchMessage(Handler.java:92) 
at android.os.Looper.loop(Looper.java:137) 
at android.app.ActivityThread.main(ActivityThread.java:4745) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:511) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
at dalvik.system.NativeStart.main(Native Method) 

Dies ist die Aktivität, die mein Kunde mir sagt, verursacht das Problem. Dies ist das EINZIGE Problem.

Ich habe versucht, das Problem neu zu erstellen, aber ich bin nicht in der Lage. Ich habe 2 verschiedene Motorola-Telefone ausprobiert.

+0

Vielen Dank somuch djmedic ... Ihre Frage hat mich gerettet. Ich habe das gleiche Problem. – praveenb

Antwort

16

Scheint ein bekannter Fehler mit TextView zu sein. Überprüfen Sie ähnliche Ausgaben here und here

Es gibt eine Erwähnung der Galaxie in der Post. Die erste Ausgabe ist für die zukünftige Veröffentlichung markiert, die zweite scheint behoben worden zu sein.

AKTUALISIERT

djmedic hat eine Abhilfe here

+0

Danke. Diese Links waren hilfreich. Ich habe einen Workaround gefunden, aber wie implementiere ich es? Es ist unter https://gist.github.com/3424004. Ist es eine separate Aktivität und ich nenne es? Wenn ja, wie nennst du es? Wenn es um meine eigentliche Aktivität geht, hatte ich Fehler. – djmedic

+1

Sie sollten diesen Code testen, indem Sie die TextView in Ihren Layouts durch JellyBeanSpanFixTextView ersetzen. Es ist keine Aktivität, es ist eine benutzerdefinierte Textansicht. So speichern Sie JellyBeanSpanFixTextView irgendwo, wie com.myproject.mycustomtextview. [Hier] (http://prasanta-paul.blogspot.com.au/2010/05/android-custom-textview.html) ist ein Tutorial, das ich gefunden habe, um eine benutzerdefinierte Ansicht in Ihrem Layout zu verwenden. Sehen Sie sich insbesondere Schritt 3 an, in dem der vollständig qualifizierte Name verwendet wird, um auf die benutzerdefinierte Ansicht zu verweisen. – rlay3

+1

rlay3 Vielen Dank für Ihre Antwort. Es hat mich gerettet. Vielen Dank für die Erklärung, wie man die Klasse benutzt. – praveenb

0

Meine Erfahrung helfen kann zu diesen Kumpels, die nicht über benutzerdefinierte Textview, um ihre Projekte hinzufügen möchten gefunden.

Erstens konnte ich diesen Fehler im Android-Emulator (4.1.2, API 16) reproduzieren. Danach entschied ich herauszufinden, was diesen Fehler verursacht. Offensichtlich - einige Formatierung (die bewirkt, dass "span" erstellt wird). Es stellte sich heraus, dass es in meinem Fall genug war, um an zwei Stellen zu ersetzen, z. dies:

\"<b>@username</b>\"

mit diesem:

\"@username\"

1

Ich hatte das gleiche Problem. Es ist nicht nur ein Problem auf JellyBean. Es hat mit einer Textansicht zu tun, die dem HTML-konvertierten Klartext span-Tags hinzufügt, die eine indexOutOfBounds-Ausnahme verursachen. Es gibt einen Workaround bei dieser link.

Ersetzen Sie Ihre Textansicht mit diesem benutzerdefinierten textView. Wenn das span-Tag-Problem auftritt, fängt es ab und zeigt stattdessen den Inhalt im Klartext an.

public class PatchedTextView extends TextView { 
public PatchedTextView(Context context, AttributeSet attrs, int defStyle) { 
    super(context, attrs, defStyle); 
} 
public PatchedTextView(Context context, AttributeSet attrs) { 
    super(context, attrs); 
} 
public PatchedTextView(Context context) { 
    super(context); 
} 
@Override 
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
    try{ 
     super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
    }catch (ArrayIndexOutOfBoundsException e){ 
     setText(getText().toString()); 
     super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
    } 
} 
@Override 
public void setGravity(int gravity){ 
    try{ 
     super.setGravity(gravity); 
    }catch (ArrayIndexOutOfBoundsException e){ 
     setText(getText().toString()); 
     super.setGravity(gravity); 
    } 
} 
@Override 
public void setText(CharSequence text, BufferType type) { 
    try{ 
     super.setText(text, type); 
    }catch (ArrayIndexOutOfBoundsException e){ 
     setText(text.toString()); 
    } 
} 

}

+0

Ich hatte Probleme mit der meistgewählten Antwort. Das hat super für mich funktioniert =) –

3

Musste gleiche Problem nach dem Update Android Studio (oder das sdk ..). Ich könnte es reparieren, indem ich den inputType des EditText setze.

android:inputType="text" 
+0

Das ist die Lösung! hat für mich gearbeitet! –

Verwandte Themen