android crash classcastexception

android - Excepción fatal: la cadena no se puede convertir a Spannable



crash classcastexception (3)

parece que estaba llamando a android: imeOptions = "actionDone" en el archivo de diseño xml. Lo eliminé y ya no se colgó.

¿por qué?

Mi aplicación funciona mucho con la excepción de algunos dispositivos. En uno de esos dispositivos, obtengo una EXCEPCIÓN FATAL en una de mis actividades. El error es java.lang.ClassCastException: java.lang.String no se puede convertir a android.text.Spannable ... ... en android.widget.TextView.setEnabled (TextView.java:1432)

STACK TRACE

05-02 09:18:19.917: E/AndroidRuntime(20587): FATAL EXCEPTION: main 05-02 09:18:19.917: E/AndroidRuntime(20587): java.lang.ClassCastException: java.lang.String cannot be cast to android.text.Spannable 05-02 09:18:19.917: E/AndroidRuntime(20587): at android.widget.TextView.setEnabled(TextView.java:1432) 05-02 09:18:19.917: E/AndroidRuntime(20587): at com.myapp.android.menu.LoginFragment.checkIfAnyFieldIsEmpty(LoginFragment.java:512) 05-02 09:18:19.917: E/AndroidRuntime(20587): at com.myapp.android.menu.LoginFragment.onCreateView(LoginFragment.java:183) 05-02 09:18:19.917: E/AndroidRuntime(20587): at android.support.v4.app.Fragment.performCreateView(Fragment.java:1460) 05-02 09:18:19.917: E/AndroidRuntime(20587): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:911) 05-02 09:18:19.917: E/AndroidRuntime(20587): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1088) 05-02 09:18:19.917: E/AndroidRuntime(20587): at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682) 05-02 09:18:19.917: E/AndroidRuntime(20587): at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1444) 05-02 09:18:19.917: E/AndroidRuntime(20587): at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:429) 05-02 09:18:19.917: E/AndroidRuntime(20587): at android.os.Handler.handleCallback(Handler.java:615) 05-02 09:18:19.917: E/AndroidRuntime(20587): at android.os.Handler.dispatchMessage(Handler.java:92) 05-02 09:18:19.917: E/AndroidRuntime(20587): at android.os.Looper.loop(Looper.java:137) 05-02 09:18:19.917: E/AndroidRuntime(20587): at android.app.ActivityThread.main(ActivityThread.java:4962) 05-02 09:18:19.917: E/AndroidRuntime(20587): at java.lang.reflect.Method.invokeNative(Native Method) 05-02 09:18:19.917: E/AndroidRuntime(20587): at java.lang.reflect.Method.invoke(Method.java:511) 05-02 09:18:19.917: E/AndroidRuntime(20587): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1004) 05-02 09:18:19.917: E/AndroidRuntime(20587): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:771) 05-02 09:18:19.917: E/AndroidRuntime(20587): at dalvik.system.NativeStart.main(Native Method)

Aquí están los fragmentos de código que rodean el error.

CÓDIGO DE DISEÑO DE XML

<com.myapp.android.view.StyledButton android:id="@+id/login_sign_in" style="@style/button_blue" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="@drawable/state_list_login" android:textColor="@color/white" android:imeOptions="actionDone" android:padding="10dp" android:text="@string/sign_in" />

CÓDIGO PERSONALIZADO JAVA CODE

public class StyledButton extends Button { //variables private final String BOLD = "fonts/arial.ttf"; private final String NORMAL = "fonts/arial_bold.ttf"; private String mCustomFont = null; /** * Constructor * @param context */ public StyledButton(Context context) { super(context); } /** * Constructor * @param context * @param attrs */ public StyledButton(Context context, AttributeSet attrs) { super(context, attrs); setCustomAttributes(attrs); } /** * Set custom attributes * @param attrs */ private void setCustomAttributes(AttributeSet attrs) { TypedArray a=getContext().obtainStyledAttributes(attrs,R.styleable.StyledTextView); mCustomFont = a.getString(R.styleable.StyledTextView_fontAsset); if(mCustomFont != null) { if(!isInEditMode()) { CustomFontManager fontManager = CustomFontManager.getInstance(); super.setTypeface(fontManager.getFont(getContext().getAssets(), mCustomFont)); } } a.recycle(); } /** * Set type face */ public void setTypeface(Typeface tf, int style) { CustomFontManager fontManager = CustomFontManager.getInstance(); if(isInEditMode()) { super.setTypeface(tf,style); return; } if(mCustomFont!=null) { super.setTypeface(fontManager.getFont(getContext().getAssets(), mCustomFont)); return; } switch (style) { case Typeface.NORMAL: super.setTypeface(fontManager.getFont(getContext().getAssets(), NORMAL)); break; case Typeface.BOLD: super.setTypeface(fontManager.getFont(getContext().getAssets(), BOLD)); break; default: super.setTypeface(fontManager.getFont(getContext().getAssets(), NORMAL)); break; } }

}

CÓDIGO JAVA CAUSANDO ERROR

private StyledButton mSignIn; public void checkIfAnyFieldIsEmpty() { if (mEmailEmpty || mPasswordEmpty) { mSignIn.setEnabled(false); } else { mSignIn.setEnabled(true); } }

La línea de código mSignIn.setEnabled (falso) está causando el error. Si lo comento o simplemente lo reemplazo, tanto si lee como si no mSignIn.setEnabled (true) la aplicación funciona bien.

De nuevo. El código como funciona bien en la mayoría de los dispositivos.


Puede ser tarde, pero ... asegúrese de que el texto en el TextView que está tratando de ampliar no esté configurado como "" . Por alguna razón, las cadenas vacías no son divisibles.


¿Hiciste que tu botón de estilo se pudiera abrir? Por ejemplo, TextView debería ser así

TextView.setText ("Hai", TextView.BufferType.SPANNABLE);