2010-10-01 160 views
12

我有一個簡單的活動在android的程序。 基本上這個類只是擴展了Activity。 但是,當我開始它,我在我的類的構造函數中得到一個ClassCastException。 我甚至沒有定義構造函數,所以它必須位於Activity的超類構造函數中。android classcastexception在活動啓動

不幸的是調試器沒有提供任何關於它試圖施放什麼類的詳細信息。

這裏是堆棧跟蹤:

Thread [<1> main] (Suspended (exception RuntimeException)) 
    ActivityThread$PackageInfo.makeApplication(boolean, Instrumentation) line: 649 
    ActivityThread.handleBindApplication(ActivityThread$AppBindData) line: 4232 
    ActivityThread.access$3000(ActivityThread, ActivityThread$AppBindData) line: 125  
    ActivityThread$H.handleMessage(Message) line: 2071 
    ActivityThread$H(Handler).dispatchMessage(Message) line: 99 
    Looper.loop() line: 123 
    ActivityThread.main(String[]) line: 4627  
    Method.invokeNative(Object, Object[], Class, Class[], Class, int, boolean) line: not available [native method] 
    Method.invoke(Object, Object...) line: 521 
    ZygoteInit$MethodAndArgsCaller.run() line: 868 
    ZygoteInit.main(String[]) line: 626 
    NativeStart.main(String[]) line: not available [native method] 

,當我看到的RuntimeException我得到:

detailMessage "Unable to instantiate application com.test.MyApp: java.lang.ClassCastException: com.test.MyApp" (id=830067694464)

唯一的代碼是

package com.test; 
import android.app.Activity; 
public class MyApp extends Activity { 

} 
+0

您可以在這裏添加程序代碼嗎? – 2010-10-01 11:36:17

+1

不能從上面做出任何事情。請發佈您的程序代碼。 – Umesh 2010-10-01 12:20:16

+3

@clamp:跨過異常,並允許Android收集堆棧信息。在DDMS透視圖的LogCat窗格中查看它。這可能會給你更多關於正在發生的事情的信息。 – CommonsWare 2010-10-01 12:26:54

回答

24
  1. 打開AndroidManifest.xml
  2. 查找標籤application
  3. 刪除屬性android:name(如果存在)
  4. 添加屬性android:name="android.app.Application"

這是我做過什麼,問題已經走了。

P.S:在步驟4中,如果您有一個(可選),請使用您的自定義應用程序類名稱。

+0

謝謝,但是這沒有幫助。你真的要在那裏設置字符串「android.app.Application」嗎?或者實際上是應用程序的名稱? – clamp 2010-10-17 17:24:30

+2

編輯了答案,希望它變得更清楚。是的,我的意思是「android.app.Application」 – 2010-10-19 14:04:43

+0

謝謝,確實解決了這個問題! – clamp 2010-10-31 13:28:42

2
@Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.main); 
} 

添加此並發表您的完整的Manifest.xml

5

我有同樣的問題。

在我的情況下,我有一個擴展應用程序的類,該應用程序在清單文件中被引用爲應用程序標記的屬性。

當我重新考慮類Eclipse時,沒有在清單中包含引用(可以理解,但令人沮喪和困惑),這導致了這個問題。

這也與馬克西姆的答案有關,但解釋似乎是不一致的。

當我更改屬性名稱以匹配我重命名的文件時,問題已解決。

+0

我知道問題是舊的但只是試圖幫助其他人在未來可能會遇到這種情況。 – slipp3ry 2011-02-13 19:07:36

+0

非常有幫助..面對同樣的問題,你能幫我解決這個問題嗎? – Sreeram 2012-05-04 06:33:54

0

如果使用谷歌地圖:

<uses-library android:name="com.google.android.maps" /> 

記住這條線。不能相信我忘了它,浪費了很多時間。

4

我犯了一個愚蠢的錯誤,

my_textView = (<b>Button</b>) findViewById(R.id.tvMyTextView); 

,這引起了ClassCastException異常 ..

我改變這明顯的,

my_textView = (<b>TextView</b>) findViewById(R.id.tvMyTextView); 

和它的工作..

我不知道如何,但我可以告訴的是,這種愚蠢的錯誤也可能會導致上述問題..

+0

是的,這是非常真實的!我花了大約三個小時試圖解決所有這些錯誤,當我需要ImageButton而不是按鈕,並且這篇文章中出現的所有錯誤都消失了! – WebDevDanno 2012-07-26 13:33:08

0

我馬赫什的答案達成一致。這會發生由於沒有鑄造分配視圖...

這也將發生,如果你投的ImageButton查看按鈕視圖或其他視圖類。

0

我有同樣的問題,我想不通,這造成的preferences.xml錯誤使用 <CheckBoxPreference android:key="@+id/string" /> 必須是改變 <CheckBoxPreference android:key="string" />

2

我有同樣的問題存在的偶爾,有時顯然是被重新觸發 - 以XML佈局排序項目。

如果您允許應用程序在未捕獲的異常之後繼續執行,您應該發現在「adb logcat」中獲得了更有用的堆棧跟蹤,而不是在調試器停止點時輕鬆離開調試器。

這通常會指出發生異常的位置,通常不是它在調試器中停止的位置。

在我的情況下,它似乎是資源ID之間的不匹配 - 在XML文件中移動東西似乎混淆了這樣的事情,當我做view.findViewById(R.id.something)時,它沒有返回我正確的對象。我正在將該對象投射到一個TextView,根據我的XML佈局的內容,它應該是完全有效的,但它正在崩潰。

你可能會發現你實際上有一個錯誤,你正在做一個無效的轉換,這肯定會導致這個異常發生,但在我的情況下,強迫一個乾淨的和重建解決了這個問題 - 它重新編譯了佈局,資源ID從頭開始,一切按預期工作。

+0

是的,我有完全相同的情況。清理了這個項目並且工作。 – akshay7692 2014-07-18 18:01:07

+0

+1我應該先閱讀它。謝謝! – Suzi 2014-10-21 05:34:28

0

有一個ClassCastException類似的問題,告訴我我不能將一個EditText作爲一個TextView。我沒有嘗試。試圖清理項目,但收到了幾個'無法刪除文件...'的錯誤。關閉Eclipse,重新打開它,清理項目。問題消失了。很明顯,這在任何情況下都不起作用,但這是一種可能性。