2012-03-03 47 views
1

我得到一个不应该发生的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; 
} 

正如您在此处看到的,它扩展了应用程序。

我的铸造知识是否有缺陷? 为什么我得到这个错误? 感谢

编辑: 完整堆栈跟踪:

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 

清单:

<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'返回? – 2012-03-03 23:21:34

+0

什么是完整的堆栈跟踪? – Jeffrey 2012-03-03 23:25:05

+0

getApplication返回一个应用程序。 我的帖子在编辑中已满。 – Brandon 2012-03-03 23:45:40

回答

3

,你会得到一个错误,如果通过getApplication()返回的具体类实际上不是TwitterApplication对象。

您是否修改了Android清单文件,以便它使用此TwitterApplication类?如果没有,你需要这样做。简单地扩展应用程序是不够的 - 你必须告诉Android使用TwitterApplication具体类。

+0

我会怎么做?我以前从未使用过应用程序。 – Brandon 2012-03-04 00:17:25

+0

没关系。发现。不得不放入 thingy。不是做一个新的。谢谢队友 – Brandon 2012-03-04 00:19:59

2

在你的清单文件,请确保您有:

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

没有工作。你可以检查我的编辑看到我的完整清单(或大部分完整)。 – Brandon 2012-03-03 23:57:44

+0

当然,您需要编辑现有的'application'标记,而不是创建一个新标记。 – Macondo2Seattle 2012-03-04 01:07:37

+0

在我发布该评论XD后不久,Ya发现了这一点 – Brandon 2012-03-04 02:44:08

相关问题