Meine App funktioniert sehr gut mit Ausnahme einiger weniger Geräte. Auf einem solchen Gerät bekomme ich bei einer meiner Aktivitäten eine FATALE AUSNAHME. Der Fehler ist java.lang.ClassCastException: java.lang.String kann nicht auf android.text.Spannable gegossen werden ... ... bei android.widget.TextView.setEnabled (TextView.java:1432)Schwerwiegende Ausnahme: String kann nicht in spannbare umgewandelt werden
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)
Hier sind die Code-Schnipsel, den Fehler umgibt.
XML LAYOUT CODE
<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" />
CUSTOM CODE BUTTON JAVA
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;
}
}
}
Java-Code fehlerverursachenden
private StyledButton mSignIn;
public void checkIfAnyFieldIsEmpty() {
if (mEmailEmpty || mPasswordEmpty) {
mSignIn.setEnabled(false);
} else {
mSignIn.setEnabled(true);
}
}
Die Codezeile mSignIn.setEnabled (false) verursacht den Fehler. Wenn ich es auskommentiere oder es einfach so ersetze, dass sowohl das if als auch sonst mSignIn.setEnabled (true) gelesen wird, läuft die App gut.
Wieder. Der Code funktioniert auf den meisten Geräten einwandfrei.
Bitte buchen Sie den gesamten Stack-Trace. – CommonsWare
Ich habe den Stack-Trace hinzugefügt – user1857437
Ich kann nicht im Quellcode für Android sehen, wo 'setEnabled()' verweist auf 'String' oder' spannable'. Sie stolpern wahrscheinlich über einen Fehler in einer herstellerspezifischen Modifikation von Android. Möglicherweise möchten Sie versuchen, den betreffenden Hersteller zu kontaktieren. – CommonsWare