2012-03-03 4 views
1

Im получает исключение ClassCastException, которое не должно происходить. Вот код:ClassCastException, которого не должно быть

TwitterApplication ta = (TwitterApplication)getApplication(); 
    OAuthProvider p = ta.getProvider(); 

Как вы видите, им пытаются бросить TwitterApplication из приложения.

public class TwitterApplication extends Application { 

private Twitter twitter; 

public Twitter getTwitter(){ 
    return this.twitter; 
} 

public void setTwitter(Twitter t){ 
    this.twitter = t; 
} 

private OAuthProvider provider; 
private CommonsHttpOAuthConsumer consumer; 

public void setProvider(OAuthProvider oap){ 
    this.provider = oap; 
} 

public OAuthProvider getProvider(){ 
    return this.provider; 
} 

public void setConsumer(CommonsHttpOAuthConsumer c){ 
    this.consumer = c; 
} 

public CommonsHttpOAuthConsumer getConsumer(){ 
    return this.consumer; 
} 

Как вы видите здесь, приложение распространяется.

Является ли мое знание кастинга неисправным? Почему я получаю эту ошибку? Благодаря

EDIT: Полный StackTrace:

03-03 15:45:09.275: ERROR/AndroidRuntime(3192): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.laytproducts.IN/com.laytproducts.IN.TwitterUpdate}: java.lang.ClassCastException: android.app.Application 
03-03 15:45:09.275: ERROR/AndroidRuntime(3192):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1696) 
03-03 15:45:09.275: ERROR/AndroidRuntime(3192):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1716) 
03-03 15:45:09.275: ERROR/AndroidRuntime(3192):  at android.app.ActivityThread.access$1500(ActivityThread.java:124) 
03-03 15:45:09.275: ERROR/AndroidRuntime(3192):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:968) 
03-03 15:45:09.275: ERROR/AndroidRuntime(3192):  at android.os.Handler.dispatchMessage(Handler.java:99) 
03-03 15:45:09.275: ERROR/AndroidRuntime(3192):  at android.os.Looper.loop(Looper.java:130) 
03-03 15:45:09.275: ERROR/AndroidRuntime(3192):  at android.app.ActivityThread.main(ActivityThread.java:3806) 
03-03 15:45:09.275: ERROR/AndroidRuntime(3192):  at java.lang.reflect.Method.invokeNative(Native Method) 
03-03 15:45:09.275: ERROR/AndroidRuntime(3192):  at java.lang.reflect.Method.invoke(Method.java:507) 
03-03 15:45:09.275: ERROR/AndroidRuntime(3192):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
03-03 15:45:09.275: ERROR/AndroidRuntime(3192):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
03-03 15:45:09.275: ERROR/AndroidRuntime(3192):  at dalvik.system.NativeStart.main(Native Method) 
03-03 15:45:09.275: ERROR/AndroidRuntime(3192): Caused by: java.lang.ClassCastException: android.app.Application 
03-03 15:45:09.275: ERROR/AndroidRuntime(3192):  at com.laytproducts.IN.TwitterUpdate.getConsumerProvider(TwitterUpdate.java:148) 
03-03 15:45:09.275: ERROR/AndroidRuntime(3192):  at com.laytproducts.IN.TwitterUpdate.onCreate(TwitterUpdate.java:117) 
03-03 15:45:09.275: ERROR/AndroidRuntime(3192):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
03-03 15:45:09.275: ERROR/AndroidRuntime(3192):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1660) 
03-03 15:45:09.275: ERROR/AndroidRuntime(3192):  ... 11 more 

Manifest:

<uses-permission android:name="android.permission.INTERNET"/> 
<uses-permission android:name="android.permission.GET_ACCOUNTS"></uses-permission> 

<application android:icon="@drawable/icon" android:label="@string/app_name"> 
    <activity android:name=".MainAct" 
       android:label="@string/app_name"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 

    <activity android:name=".Main" /> 

    <activity android:name=".FBUpdate"> 
     <intent-filter> 
      <action android:name="com.laytproducts.IN.WidgetAct.ACTION_WIDGET_FB" /> 
     </intent-filter> 
    </activity> 
    <activity android:name=".TwitterUpdate"> 
     <intent-filter> 
      <action android:name="com.laytproducts.IN.WidgetAct.ACTION_WIDGET_TWITTER" /> 
     </intent-filter> 
    </activity> 

    <application android:name="TwitterApplication" /> 

    <receiver android:name=".WidgetAct"> 
     <intent-filter> 
      <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> 
     </intent-filter> 
     <meta-data android:name="android.appwidget.provider" 
      android:resource="@xml/winfo"/> 
    </receiver> 
</application> 
+4

Что 'getApplication' вернуться? –

+0

Что такое полная трассировка стека? – Jeffrey

+0

getApplication возвращает приложение. Публикация полностью заполняется. – Brandon

ответ

3

вы получите ошибку, если конкретный класс возвращаемый getApplication() в действительности не является объектом TwitterApplication.

Вы внесли изменения в свой файл манифеста Android, чтобы он использовал этот класс TwitterApplication? Если нет, вам нужно будет это сделать. Простого продления приложения недостаточно - вы должны сказать Android, чтобы использовать конкретный класс TwitterApplication.

+0

Как мне это сделать? Раньше я никогда не работал с приложениями. – Brandon

+0

Nevermind. Выяснил. должен был положить INTO в thingy. не создавать новую. Спасибо mate – Brandon

2

В вашем файле манифеста, убедитесь, что у вас есть:

<application android:name="TwitterApplication"> 
+0

Не работает. Вы можете проверить мое Редактирование, чтобы увидеть мой полный манифест (или в основном полный). – Brandon

+0

Конечно, вам нужно отредактировать существующий тег 'application', а не создать новый. – Macondo2Seattle

+0

Я обнаружил это вскоре после того, как я разместил этот комментарий XD – Brandon

Смежные вопросы