2011-05-01 77 views
7

我試圖使用顯式意圖在我的android應用程序中顯示一個MapView。儘管我沒有看到我的代碼有任何問題,但當我嘗試啓動我的活動時,我仍然收到「NoClassDefFoundError」。 基本上,從我的主要活動(SetCriteria),我創建了明確的意向時,用戶按下一個按鈕:Android顯式意圖拋出NoClassDefFound錯誤

Log.i(TAG, "Showing map.."); 
try{ 
    Intent intentMap = new Intent(view.getContext(), AddLocation.class); 
    startActivity(intentMap); 
}catch(Throwable ex) { 
    Log.e(TAG, "Error occured while trying to display map", ex); 
} 

我的logcat顯示:

java.lang.NoClassDefFoundError: com.adm.AddLocation 
... 
Caused by: java.lang.IllegalAccessError: Class ref in pre-verified class resolved to unexpected implementation 

我的清單看起來是這樣的:

<application android:label="@string/app_name" android:icon="@drawable/ic_launcher_red"> 
    <uses-library android:name="com.google.android.maps"/>    
    <activity android:name=".SetCriteria" 
       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=".AddLocation" 
      android:label="@string/add_location">   
    </activity> 
</application> 

我只有一個包:com.adm。那麼有什麼可能是錯的?我用Intent(Intent.ACTION_VIEW,uri)啓動地圖沒有問題,但我想要處理地圖的具體活動。

回答

1

你應該在第二個活動申報類名之前刪除「.」(點),所以它看起來像:

<activity android:name="AddLocation" android:label="@string/add_location"> 
+0

它現在的作品,謝謝。我甚至都沒有想到這是問題所在,因爲我在Manning的「Android in Action」中讀到過,點的缺失有時會導致調試時間長達數小時......並且應該始終存在。 – joanna 2011-05-01 16:29:43

+1

對,如果它從啓動器/主要活動中丟失。儘管我做了幾個小時的調試,直到出現,但其他活動不需要它,除非它們在內部包中,例如'com.adm.activities'。那麼你應該聲明它爲'android:name =「。activities.AddLocation」'。 +1的問題,希望它能幫助別人! – rekaszeru 2011-05-01 16:32:30

+2

當我嘗試顯式啓動一個MapActivity Intent時,我看到了同樣的問題,NoClassDefFErError。但是,那 」。」在清單中似乎沒有任何影響。我的問題是我在清單中缺少「」行。不過,對於使用「inner-packages」的說明+1。 – plainjimbo 2011-05-22 22:46:55

1

從清單片段中不清楚,您定義了哪個包。

你需要把它放在頂層清單元素:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
      package="com.adm" 
      > 

    <application android:icon="@drawable/icon" android:label="@string/app_name" ... 

如果不添加,系統將不使用的軟件包和你的活動「.AddLocation」將結束,因爲「AddLocation」沒有上課,這與com.adm.AddLocation不一樣。

+0

我只是沒有張貼我的整個清單,但包聲明沒問題。其他人正在造成這個問題。無論如何感謝您的回答 – joanna 2011-05-01 16:27:12