2012-10-11 41 views
17

Aparentemente tengo un problema con 1 actividad en un Samsung Nexus en una aplicación y no puedo entender qué es lo que realmente está causando el problema.No puedo resolver el problema con un error stacktrace

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) 

Esta es la actividad que mi cliente me está diciendo es la causante del problema. Este es el ÚNICO problema.

import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.Menu; 



public class Protocols03_04Activity extends Activity 
{ 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.protocols03_04); 



    } 
    //Options Menu 
    @Override 
    public boolean onCreateOptionsMenu(Menu menu) 
    { 
     super.onCreateOptionsMenu(menu); 
     getMenuInflater().inflate(R.menu.optmenu, menu); 
     menu.findItem(R.id.medcom_optmenu_item).setIntent(new Intent(this, CallMedcom.class)); 
     menu.findItem(R.id.dispatch_optmenu_item).setIntent(new Intent(this, CallDispatch.class)); 
     menu.findItem(R.id.settings_optmenu_item).setIntent(new Intent(this, ProtocolsSettingsActivity.class)); 
     menu.findItem(R.id.mmenu_optmenu_item).setIntent(new Intent(this, ProtocolsMMenuActivity.class)); 
     menu.findItem(R.id.gps_optmenu_item).setIntent(new Intent(this, GPSActivity.class)); 
     menu.findItem(R.id.search_optmenu_item).setIntent(new Intent(this, SearchActivity.class)); 
     return true; 
    } 
} 

He intentado recrear el problema, pero no puedo. Probé con 2 teléfonos Motorola diferentes.

+0

Gracias somuch djmedic ... Tu pregunta me salvó. Tengo el mismo tipo de problema. – praveenb

Respuesta

16

Parece ser un error conocido con TextView. Comprobar problemas similares here y here

Se menciona la galaxia en la publicación. El primer problema está marcado para futuras versiones, el segundo parece haber sido arreglado.

ACTUALIZADO

djmedic ha encontrado una solución here

+0

Gracias. Esos enlaces fueron útiles. Encontré una solución, pero ¿cómo la implemento? Está en https://gist.github.com/3424004. ¿Es una actividad separada y la llamo? Si es así, ¿cómo lo llamas? Si es para entrar en mi Actividad real, tuve errores. – djmedic

+1

Debe probar ese código reemplazando el TextView en sus diseños con JellyBeanSpanFixTextView. No es una actividad, es una vista de texto personalizada. Así que guarde JellyBeanSpanFixTextView en alguna parte, como com.myproject.mycustomtextview. [Aquí] (http://prasanta-paul.blogspot.com.au/2010/05/android-custom-textview.html) es un tutorial que encontré para usar una vista personalizada en su diseño. En particular, consulte el paso 3, donde está utilizando el nombre completo para hacer referencia a la vista personalizada. – rlay3

+1

rlay3 Gracias por tu respuesta. Me salvó. Muchas gracias por la explicación de cómo usar la clase. – praveenb

0

Mi experiencia puede ayudar a los amigos de las, que no quieren añadir TextView a medida para sus proyectos.

En primer lugar, podría reproducir este error en el emulador de Android (4.1.2, API 16). Después de esto, decidí averiguar qué está causando este error. Obviamente, algunos formatos (que provocan "tramos" para crearse). Resultó que en mi caso fue suficiente para reemplazar en dos lugares, p. esto:

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

con esto:

\"@username\"

1

tuve el mismo problema. No es solo un problema en jellyBean. Tiene que ver con una vista de texto que agrega etiquetas de extensión al texto plano convertido html que causa una excepción indexOutOfBounds. Hay una solución en este link.

Reemplace su vista de texto con esta vista de texto personalizada. Si aparece el problema de la etiqueta span, esto lo atrapa y en su lugar muestra el contenido en texto sin formato.

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

Tuve problemas con la respuesta más votada. Esto funcionó muy bien para mí =) –

3

Tuvo que mismo problema después de la actualización de Android Studio (o el SDK ..). Podría arreglarlo estableciendo el inputType de EditText.

android:inputType="text" 
+0

¡Esa es la solución! ¡trabajó para mi! –

Cuestiones relacionadas